我有一个简单的Java函数,可以计算两个日期之间的周数,每七天等于一周:
function getWeeksDiff(startDate, endDate) {
const msInWeek = 1000 * 60 * 60 * 24 * 7;
return Math.round(Math.abs(endDate - startDate) / msInWeek);
}
它工作正常,但现在我想改变逻辑.我想从每周一到周六休息一周,不管是哪一天,这和7天没有严格的关系
例如:今天是11月23日,所以24、25、26和27必须算1周,从周一28到周日4必须算两周,所以我的逻辑是这样的:
const week = 1000 * 60 * 60 * 24 * 7;
const day = 24 * 60 * 60 * 1000;
function weeksBetween(startDate, endDate) {
return Math.ceil((weekStart(endDate) - weekStart(startDate)) / week) + 1;
}
function weekStart(dt) {
const weekday = dt.getDay();
return new Date(dt.getTime() - Math.abs(0 - weekday) * day);
}
但出于某种原因,每个星期天它都会多计算一周,例如,27日星期天已经向我显示了两周而不是一周:
const week = 7 * 24 * 60 * 60 * 1000;
const day = 24 * 60 * 60 * 1000;
function weekStart(dt) {
const weekday = dt.getDay();
return new Date(dt.getTime() - Math.abs(0 - weekday) * day);
}
function weeksBetween(d1, d2) {
return Math.ceil((weekStart(d2) - weekStart(d1)) / week)+1;
}
console.log(weeksBetween(new Date("11/23/2022"), new Date("11/27/2022")));