JavaScript如何获取从今日到本周日的所有日期列表
问题原因
- 核心错误是跨月场景下的日期差值计算逻辑错误:你直接用
getDate()获取当月日期数字相减,若今日和本周日不在同一个自然月,差值会是负数,for循环直接不执行,最终数组里就只有初始push的当天日期,也就是你遇到的仅返回周一日期的问题。 - 额外小问题:直接修改
firstDayOfWeek对象不会影响功能,但差值计算的逻辑硬伤是故障的核心诱因。
修复后的dateSets方法
dateSets() { const dates = []; // 固定初始当前日期,避免后续操作覆盖原始值 const currentDate = new Date(); // 计算本周日的日期 const sunday = new Date(); sunday.setDate(sunday.getDate() - sunday.getDay() + 7); // 用时间戳计算日期差值,规避跨月问题 const diffTime = sunday.getTime() - currentDate.getTime(); const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24)); // 循环覆盖从今日到周日的所有日期 for (let i = 0; i <= diffDays; i++) { const tempDate = new Date(currentDate); tempDate.setDate(currentDate.getDate() + i); dates.push(tempDate); } return dates; },
效果验证
如果今日是周一,diffDays计算结果为6,循环执行7次,返回周一到周日共7个日期;如果今日是周二,diffDays计算结果为5,循环执行6次,返回周二到周日共6个日期,完全符合需求。如果今日是周日,diffDays为0,数组仅返回周日当天,边界场景也适配。
内容的提问来源于stack exchange,提问作者magic bean
相关产品推荐
相关产品推荐

