JavaScript获取下一周周一日期的自定义函数返回错误值如何解决
问题排查与修复方案
现有代码错误点
- 偏移量计算逻辑重复:你在定义
daysToMonday后计算最终日期时,额外叠加了一次d.getDay(),相当于多增加了等于当前星期数的天数,直接导致结果偏移错误 - 边界场景未覆盖:如果运行脚本当天就是周一,现有逻辑会计算出下下周的周一,不符合预期
- 对输出结果缺少格式化:现有代码返回的是Date对象,无法直接得到你需要的
YYYY-MM-DD格式字符串
正确实现代码
export function getMondayDate() { const d = new Date(); const MONDAY_WEEK_DAY_VALUE = 1; const DAYS_IN_WEEK = 7; const currentWeekDay = d.getDay(); // 计算到下周一的偏移天数:如果当天是周一,默认取7天后的下周一 const daysToAdd = (MONDAY_WEEK_DAY_VALUE - currentWeekDay + DAYS_IN_WEEK) % DAYS_IN_WEEK || DAYS_IN_WEEK; d.setDate(d.getDate() + daysToAdd); // 格式化输出为YYYY-MM-DD格式 const year = d.getFullYear(); const month = String(d.getMonth() + 1).padStart(2, '0'); const date = String(d.getDate()).padStart(2, '0'); return `${year}-${month}-${date}`; }
逻辑说明
getDay()方法返回值范围为0(周日)到6(周六),周一对应的返回值为1- 公式
(1 - currentWeekDay +7) %7可以得到从当日到最近一个周一的偏移天数,如果结果为0说明当日就是周一 - 如果你的需求是当日为周一的时候返回当日而不是下周一,删除代码里的
|| DAYS_IN_WEEK即可
内容的提问来源于stack exchange,提问作者John Doah
相关产品推荐
相关产品推荐

