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

当前日期为29/30/31日时,JavaScript减月份出现重复月份问题排查

日期操作警示:月末切换月份的陷阱

给社区提个醒:当当前日期是29、30或31日时,循环切换前后月份一定要格外注意。我就踩过这个坑:

我写了一个JavaScript函数getLast24Months,用来给JS图表生成过去24个月的年月条目(哪怕没数据也要包含所有月份),代码如下:

function getLast24Months() {
    let result = [];
    let now = new Date();
    for (let i = 0; i < 24; i++) {
        let yyyy = now.getFullYear();
        let mm = now.getMonth() + 1;
        mm = mm < 10 ? `0${mm}` : `${mm}`;
        result.unshift(`${yyyy}-${mm}`);
        now.setMonth(now.getMonth() - 1);
    }
    return result;
}

这个函数平时运行都正常,但最近发现结果里出现了两个2023-03条目。

故障原因分析

  • 未重置日期:循环开始前没把日期显式重置为当月第一天,new Date()初始化的是当前完整日期时间,操作月份时没法保证指向当月首日。
  • 对setMonth方法的误解:setMonth方法只修改Date对象的月份,不会自动把日期调整为新月份的第一天,所以从非当月首日减月份会导致日期计算错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:09:55