要计算时间差并去掉周六周日,我们可以使用 JavaScript 内置的 Date 对象,它提供了许多方法来处理日期和时间。以下是实现这个功能的步骤:
- 获取开始时间和结束时间的 Date 对象。
我们可以使用 Date 对象的构造函数来创建具有指定日期和时间的日期对象。例如,我们可以这样创建一个代表 2021 年 1 月 1 日的 Date 对象:new Date('2021-01-01')
。
- 计算时间差。
我们可以使用 Date 对象的 getTime() 方法来获取日期的 Unix 时间戳,它表示从 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数。然后我们可以将结束时间的时间戳减去开始时间的时间戳,得到它们之间的时间差。例如:
const startTime = new Date('2021-01-01');
const endTime = new Date('2021-01-05');
const timeDiff = endTime.getTime() - startTime.getTime();
- 去掉周六周日。
为了去掉周六周日,我们需要检查日期对象的 getDay() 方法返回的数字是否为 0 或 6,这意味着它是周六或周日。如果是,我们将时间差减去这一天的毫秒数。
以下是一个完整的示例代码,它计算给定日期范围内去掉周六周日后的毫秒数差:
function getTimeDiffWithoutWeekend(startDate, endDate) {
const DAY_IN_MS = 1000 * 60 * 60 * 24;
const startTime = new Date(startDate);
const endTime = new Date(endDate);
let timeDiff = endTime.getTime() - startTime.getTime();
const startDayOfWeek = startTime.getDay();
const endDayOfWeek = endTime.getDay();
// 如果开始时间是周六或周日,则将开始时间调整到下周一
if (startDayOfWeek === 6) {
startTime.setDate(startTime.getDate() + 2);
timeDiff -= DAY_IN_MS * 2;
} else if (startDayOfWeek === 0) {
startTime.setDate(startTime.getDate() + 1);
timeDiff -= DAY_IN_MS;
}
// 如果结束时间是周六或周日,则将结束时间调整到上周五
if (endDayOfWeek === 6) {
endTime.setDate(endTime.getDate() - 1);
timeDiff -= DAY_IN_MS;
} else if (endDayOfWeek === 0) {
endTime.setDate(endTime.getDate() - 2);
timeDiff -= DAY_IN_MS * 2;
}
// 计算周六和周日的天数
const weekendDays = Math.floor(timeDiff / DAY_IN_MS / 7) * 2;
// 如果开始和结束时间都不是周六或周日,但它们之间跨越了周六或周日,则将对应的天数减去
if (startDayOfWeek < endDayOfWeek) {
if (startDayOfWeek === 0 && endDayOfWeek === 6) {
weekendDays -= 1;
} else {
weekendDays -= 2;
}
}
// 返回去掉周六周日的毫秒数差
return timeDiff - weekendDays * DAY_IN_MS;
}
以下是两个示例,它们分别计算从 2021 年 1 月 1 日到 2021 年 1 月 5 日和从 2021 年 5 月 1 日到 2021 年 5 月 31 日的时间差,去掉其中的周六周日:
console.log(getTimeDiffWithoutWeekend('2021-01-01', '2021-01-05')); // 259200000
console.log(getTimeDiffWithoutWeekend('2021-05-01', '2021-05-31')); // 1872000000
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js 取时间差去掉周六周日实现代码 - Python技术站