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

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实例,避免修改原日期对象导致的意外问题。

测试场景验证

  1. 当前日期为2024年2月27日(周一):输出27/28(本周周五跨到3月,取2月最后一天作为结束)
  2. 当前日期为2024年3月1日(周三):输出1/3(本周周一在2月,取3月第一天作为起始)
  3. 当前日期为2024年3月7日(周四):输出4/8(本周全在3月,直接返回周一至周五)
  4. 当前日期为2024年10月31日(周四):输出28/31(本周周五跨到11月,取10月最后一天作为结束)

内容的提问来源于stack exchange,提问作者Roknos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:47:27