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 –
感謝您的提示喬治:) –