0
我试图计算两个日期之间的业务时间,下至分钟。营业时间定义为东部时间上午8点到下午6点(如果是夏令时,则为EDT)。计算不包括晚上和周末的日期之间的分钟数?
我找到这个答案,这在小时进行这一点,但我不知道该如何转换为分钟,并确保我的时区不会被搞砸了:
https://stackoverflow.com/a/11092865/104998
function isHoliday(/*Date*/ date) {
for (var i = 0; i < holidays.length; i++) {
if (holidays[i].getTime() == date.getTime()) {
return true;
}
}
return false;
}
function diffHours(/*Date*/ d1, /*Date*/ d2) {
var date1 = new Date(d1.getUTCFullYear() + "-" + (d1.getUTCMonth() + 1) + "-" + d1.getUTCDate() + " UTC");
var date2 = new Date(d2.getUTCFullYear() + "-" + (d2.getUTCMonth() + 1) + "-" + d2.getUTCDate() + " UTC");
var sum = 0;
var oneday = 24 * 3600 * 1000;
var hours, date;
// first day
if (!isHoliday(date1)) {
// decrease by a whole day first (will be added later)
sum -= 10;
// add real hours
hours = d1.getUTCHours() + d1.getUTCMinutes()/60;
if (hours <= 6) {
sum += 10 - hours;
} else if (hours <= 20) {
sum += 4;
} else {
sum += 24 - hours;
}
}
// last day
if (!isHoliday(date2)) {
// decrease by a whole day first (will be added later)
sum -= 10;
// add real hours
hours = d2.getUTCHours() + d2.getUTCMinutes()/60;
if (hours <= 6) {
sum += hours;
} else if (hours <= 20) {
sum += 6;
} else {
sum += hours - 14;
}
}
// whole days
while (date1 <= date2) {
if (!isHoliday(date1)) {
sum += 10;
}
// increase date by 1 day
date1.setTime(date1.getTime() + oneday);
}
return Math.floor(sum);
}
// ==============
// examples below
// --------------
// array of Dates (in UTC) to skip
var holidays = [
new Date("2012-01-04 UTC"),
];
for (var i = 0; i < holidays.length; i++) {
console.log('holiday: ', holidays[i].toUTCString());
}
a = new Date("2012-01-01 12:00 UTC");
b = new Date("2012-01-02 12:00 UTC");
c = new Date("2012-01-02 22:00 UTC");
d = new Date("2012-01-03 07:00 UTC");
e = new Date("2012-01-05 12:00 UTC");
console.log({
d1: a.toUTCString(),
d2: b.toUTCString(),
hours: diffHours(a, b)
});
console.log({
d1: b.toUTCString(),
d2: c.toUTCString(),
hours: diffHours(b, c)
});
console.log({
d1: c.toUTCString(),
d2: d.toUTCString(),
hours: diffHours(c, d)
});
console.log({
d1: d.toUTCString(),
d2: e.toUTCString(),
hours: diffHours(d, e)
});
任何帮助将不胜感激。
要转换到分钟乘小时由60 –
感谢您的提示乔治:) –