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

非闰年2月日历切换异常问题求助:跳转至2023年2月时显示3月,闰年场景功能正常

解决非闰年2月日历显示异常的问题

这个问题的核心原因在于JavaScript Date对象的自动日期溢出处理:当你调用setMonth()时,如果当前日期超出了目标月份的最大天数,Date会自动将日期滚动到下一个月。举个例子:如果当前系统日期是31号(比如1月31号),当你把月份设置为1(对应2月),2023年的2月只有28天,Date会自动调整为3月3号,此时getMonth()返回的是2(对应3月),自然就显示成3月了。

修复方案

解决方法很简单:在调整月份之前,先把日期设置为当月的第一天,这样就不会出现日期溢出的情况。修改后的代码如下:

let nav = 0;
let test = () => {
  const dt = new Date();
  dt.setDate(1); // 关键修改:先将日期设为1号,避免日期溢出
  dt.setMonth(new Date().getMonth() + nav);
  const month = dt.getMonth();
  const year = dt.getFullYear();
  const monthName = `${dt.toLocaleDateString("en", { month: "long" })} ${year}`;
  document.getElementById('feedBack').innerHTML = 'Nav: ' + nav + ' - Day: ' + 1 + ' - Month: ' + month + ' ( <b>' + monthName + '</b> ) - Year: ' + year;
}
test();
#feedBack {margin-top:10px}
<button onclick="nav--;test()">Prev</button>
<button onclick="nav=0;test();">Current</button>
<button onclick="nav++;test()">Next</button>
<div id="feedBack"></div>

修改说明

  • 新增dt.setDate(1):在调整月份之前,强制将日期设置为1号。这样无论当前系统日期是几号,调整月份时都是从目标月份的1号开始,不会触发Date的自动溢出逻辑。
  • 这样当你切换到2023年2月时,Date对象会正确指向2023年2月1号,getMonth()返回1,显示的月份名称就是February 2023,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:02:33