You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按周一至周日周区间计算两个日期的周数差?

按周一至周日周区间计算日期周数差的实现方案

要实现按周一至周日的周区间统计周数差,核心思路是先把两个日期都对齐到各自所在周的周一(周起始基准),再计算这两个基准日之间的完整周数。

实现步骤

  1. 编写辅助函数,将任意日期转换为该周的周一:
    • JavaScript的Date.getDay()返回值:周日为0,周一至周六为1-6。
    • 如果目标日期是周日,需要往前推6天得到周一;如果是其他日期,往前推(getDay()-1)天即可。
  2. 计算两个对齐后的周一日期的毫秒差,除以一周的毫秒数(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:15:45