如何按周一至周日周区间计算两个日期的周数差?
按周一至周日周区间计算日期周数差的实现方案
要实现按周一至周日的周区间统计周数差,核心思路是先把两个日期都对齐到各自所在周的周一(周起始基准),再计算这两个基准日之间的完整周数。
实现步骤
- 编写辅助函数,将任意日期转换为该周的周一:
- JavaScript的
Date.getDay()返回值:周日为0,周一至周六为1-6。 - 如果目标日期是周日,需要往前推6天得到周一;如果是其他日期,往前推
(getDay()-1)天即可。
- JavaScript的
- 计算两个对齐后的周一日期的毫秒差,除以一周的毫秒数(
1000*60*60*24*7),取整数结果就是周数差。
完整代码实现
// 辅助函数:将日期转换为所在周的周一(00:00:00) function getWeekStart(date) { const clonedDate = new Date(date); const day = clonedDate.getDay(); // 计算需要回退的天数:周日回退6天,其他天回退(day-1)天 const offset = day === 0 ? -6 : -(day - 1); clonedDate.setDate(clonedDate.getDate() + offset); // 重置时间为00:00:00,避免时分秒影响计算 clonedDate.setHours(0, 0, 0, 0); return clonedDate; } // 计算两个日期按周一至周日周区间的周数差 function getWeeksDiff(startDate, endDate) { const startWeekStart = getWeekStart(startDate); const endWeekStart = getWeekStart(endDate); const msInWeek = 1000 * 60 * 60 * 24 * 7; // 计算毫秒差后取整,因为已经对齐到周一,直接整除即可 return Math.round(Math.abs(endWeekStart - startWeekStart) / msInWeek); }
测试示例
按照你给出的场景测试:
- 假设11月23日是周三,11月25日(属于24-27日所在周)和11月29日(属于28日-12月4日所在周)的周数差为1:
const date1 = new Date('2024-11-25'); const date2 = new Date('2024-11-29'); console.log(getWeeksDiff(date1, date2)); // 输出:1
- 11月27日(周日)和11月28日(周一)的周数差为1:
const date3 = new Date('2024-11-27'); const date4 = new Date('2024-11-28'); console.log(getWeeksDiff(date3, date4)); // 输出:1
内容的提问来源于stack exchange,提问作者Jesus
相关产品推荐
相关产品推荐

