使用JavaScript判断两个日期是否处于同一周的实现方法
JavaScript判断两个日期是否属于同一周实现方案
实现逻辑
- 周起始规则匹配示例要求:以周一作为每周的第一天
- 首先消除日期的时分秒部分干扰,统一转换为对应日期的零点时间
- 计算每个日期所属当周周一的零点时间戳,若两个时间戳相等则属于同一周
完整代码
/** * 判断两个日期是否属于同一周 * @param {string} dateStr1 日期1 格式为YYYY-MM-DD * @param {string} dateStr2 日期2 格式为YYYY-MM-DD * @returns {boolean} 是否属于同一周 */ function isSameWeek(dateStr1, dateStr2) { // 辅助函数:获取指定日期当周周一的零点时间戳 const getMondayTimestamp = (dateStr) => { const date = new Date(dateStr); // 校验日期合法性 if (isNaN(date.getTime())) { throw new Error('无效的日期格式,请使用YYYY-MM-DD格式'); } // 清除时分秒毫秒,避免时间部分干扰 date.setHours(0, 0, 0, 0); // getDay()返回值:0为周日,1为周一,...,6为周六 const dayOfWeek = date.getDay(); // 计算当前日期距离当周周一的天数差 const diff = date.getDate() - (dayOfWeek === 0 ? 6 : dayOfWeek - 1); // 切换到当周周一的日期 date.setDate(diff); return date.getTime(); }; try { return getMondayTimestamp(dateStr1) === getMondayTimestamp(dateStr2); } catch (e) { console.error(e.message); return false; } } // 调用测试 console.log(isSameWeek('2021-09-20', '2021-09-24') ? 'Present in same week' : 'Not in same week'); // 输出:Present in same week console.log(isSameWeek('2021-09-24', '2021-09-27') ? 'Present in same week' : 'Not in same week'); // 输出:Not in same week
规则调整说明
如果需要将周起始日改为周日,只需要修改getMondayTimestamp函数中的天数差计算逻辑即可:
// 周日为周起始的天数差计算 const diff = date.getDate() - dayOfWeek;
内容的提问来源于stack exchange,提问作者Gunjan Kiratkar
相关产品推荐
相关产品推荐

