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

JS的Date对象固定月份增减日期功能异常如何修复

问题原因

你编写的日期加1逻辑可以正常运行,是因为加1跨月后得到的日期永远是下个月1号,任意月份都存在1号,所以直接把月份改回原月份不会出现异常。
而减1逻辑出错的核心原因是:减1跨月后得到的是上个月的最后一天(可能是28/29/30/31号),直接把月份改回原月份时,如果原月份没有对应天数,JS会自动将日期向后溢出,比如11月没有31号,设置2021-11-31会自动转为2021-12-01,极端情况就会出现你遇到的跳转到12月31日的问题。

修复方案

跨月回设日期时,不要仅修改月份,而是直接将日期设置为原月份的最后一天,避免日期溢出:

let cur_date = new Date();

setInterval(() => {
  const curYear = cur_date.getFullYear();
  const curMonth = cur_date.getMonth();
  const curDay = cur_date.getDate();
  cur_date.setDate(curDay - 1);
  // 出现跨月则回设为原月份最后一天
  if (cur_date.getMonth() !== curMonth) {
    // 获取当前原月份的总天数
    const lastDay = new Date(curYear, curMonth + 1, 0).getDate();
    cur_date.setFullYear(curYear, curMonth, lastDay);
  }
  console.log(cur_date.toLocaleString());
}, 1000);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:45:05