in plugins/struts2-dojo-plugin/src/main/resources/org/apache/struts2/static/dojo/src/date/common.js [197:315]
dojo.date.diff = function (dtA, dtB, interv) {
if (typeof dtA == "number") {
dtA = new Date(dtA);
}
if (typeof dtB == "number") {
dtB = new Date(dtB);
}
var yeaDiff = dtB.getFullYear() - dtA.getFullYear();
var monDiff = (dtB.getMonth() - dtA.getMonth()) + (yeaDiff * 12);
var msDiff = dtB.getTime() - dtA.getTime();
var secDiff = msDiff / 1000;
var minDiff = secDiff / 60;
var houDiff = minDiff / 60;
var dayDiff = houDiff / 24;
var weeDiff = dayDiff / 7;
var delta = 0;
with (dojo.date.dateParts) {
switch (interv) {
case YEAR:
delta = yeaDiff;
break;
case QUARTER:
var mA = dtA.getMonth();
var mB = dtB.getMonth();
var qA = Math.floor(mA / 3) + 1;
var qB = Math.floor(mB / 3) + 1;
qB += (yeaDiff * 4);
delta = qB - qA;
break;
case MONTH:
delta = monDiff;
break;
case WEEK:
delta = parseInt(weeDiff);
break;
case DAY:
delta = dayDiff;
break;
case WEEKDAY:
var days = Math.round(dayDiff);
var weeks = parseInt(days / 7);
var mod = days % 7;
if (mod == 0) {
days = weeks * 5;
} else {
var adj = 0;
var aDay = dtA.getDay();
var bDay = dtB.getDay();
weeks = parseInt(days / 7);
mod = days % 7;
var dtMark = new Date(dtA);
dtMark.setDate(dtMark.getDate() + (weeks * 7));
var dayMark = dtMark.getDay();
if (dayDiff > 0) {
switch (true) {
case aDay == 6:
adj = -1;
break;
case aDay == 0:
adj = 0;
break;
case bDay == 6:
adj = -1;
break;
case bDay == 0:
adj = -2;
break;
case (dayMark + mod) > 5:
adj = -2;
break;
default:
break;
}
} else {
if (dayDiff < 0) {
switch (true) {
case aDay == 6:
adj = 0;
break;
case aDay == 0:
adj = 1;
break;
case bDay == 6:
adj = 2;
break;
case bDay == 0:
adj = 1;
break;
case (dayMark + mod) < 0:
adj = 2;
break;
default:
break;
}
}
}
days += adj;
days -= (weeks * 2);
}
delta = days;
break;
case HOUR:
delta = houDiff;
break;
case MINUTE:
delta = minDiff;
break;
case SECOND:
delta = secDiff;
break;
case MILLISECOND:
delta = msDiff;
break;
default:
break;
}
}
return Math.round(delta);
};