Node.js获取当前周内同月的起止日期问题
Node.js 跨月周内同月份工作日起止日期处理
需求说明
需要获取当前日期所在月份中,属于当前周的周一至周五的起止日期:
- 若本周周一至周五均在当月,直接返回对应日期区间
- 若本周跨月:
- 当前日期在当月的周前半段(周一、周二),返回当月剩余的工作日区间
- 当前日期在当月的周后半段(周三至周五),返回当月起始的工作日区间
解决代码
const date = new Date(); const currentMonth = date.getMonth(); const currentYear = date.getFullYear(); // 计算本周周一 const startOfWeek = new Date(date); startOfWeek.setDate(startOfWeek.getDate() - startOfWeek.getDay() + 1); // 计算本周周五 const endOfWeek = new Date(date); endOfWeek.setDate(endOfWeek.getDate() + (5 - endOfWeek.getDay())); // 确定同月份的有效起始日期 let validStart = startOfWeek; if (validStart.getMonth() !== currentMonth) { // 当前日期在下月,取当月第一天(本周内的起始) validStart = new Date(currentYear, currentMonth, 1); } // 确定同月份的有效结束日期 let validEnd = endOfWeek; if (validEnd.getMonth() !== currentMonth) { // 当前日期在上月,取当月最后一天(本周内的结束) validEnd = new Date(currentYear, currentMonth + 1, 0); } // 提取日数 const firstDay = validStart.getDate(); const lastDay = validEnd.getDate(); console.log(`${firstDay}/${lastDay}`);
代码关键点解释
- 日期边界处理:用
new Date(currentYear, currentMonth + 1, 0)获取当月最后一天,这是Date对象的特性——传入超出当月天数的数值会自动回退到上月对应日期。 - 跨月判断:通过比较周一周五的月份与当前日期的月份,调整起止日期到当前月份的边界,确保结果始终在当前日期所属月份内。
- 实例隔离:所有日期操作都创建新的Date实例,避免修改原日期对象导致的意外问题。
测试场景验证
- 当前日期为2024年2月27日(周一):输出
27/28(本周周五跨到3月,取2月最后一天作为结束) - 当前日期为2024年3月1日(周三):输出
1/3(本周周一在2月,取3月第一天作为起始) - 当前日期为2024年3月7日(周四):输出
4/8(本周全在3月,直接返回周一至周五) - 当前日期为2024年10月31日(周四):输出
28/31(本周周五跨到11月,取10月最后一天作为结束)
内容的提问来源于stack exchange,提问作者Roknos
相关产品推荐
相关产品推荐

