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

获取月末最后一天:输出结果与预期不符

为什么获取月末日期的结果和你查到的旧解答不一致?

首先得明确一个JavaScript Date对象的核心规则——月份参数是0-based的:0对应1月,1对应2月,2对应3月,以此类推直到11对应12月。而当日期参数传入0时,会自动回退到「指定月份的前一个月的最后一天」,这是ECMAScript标准里一直规定的行为,从来没变过。

我们来拆解你的情况:

  • 你现在用Date(2018,2,0)得到2018年2月的最后一天(2018-02-28),这完全是标准且正确的:参数里的2代表3月,传入0就会回退到3月的前一个月(也就是2月)的最后一天。
  • 你查到的旧解答里用Date(2018,3,0),这其实是用来获取2018年3月的最后一天(2018-03-31)的——3代表4月,0回退到4月的前一个月(3月)的最后一天。

那为什么会出现这种差异?可能有这几个原因:

  • 旧解答本身有误:有些早期的技术文章或者回答可能混淆了Date的月份索引,把「获取2月最后一天」的代码写错成了(2018,3,0),这其实是个错误。
  • 第三方库/组件的封装变化:如果你之前是通过某个日期处理库(比如旧版的自定义日期组件、部分早期日期工具)来调用的,有些库会把月份改成1-based的(也就是1对应1月,2对应2月)。如果这个库后来升级,改成了遵循ECMAScript标准的0-based,那原来的调用方式就会失效,需要调整参数。比如旧版库用(2018,3,0)才能获取2月最后一天,而现在升级后就需要传入(2018,2,0)。
  • 场景误解:有些旧解答可能是在讲「获取3月最后一天」,你误看成了「获取2月最后一天」。

你可以直接在浏览器控制台或者Node环境里验证这两行代码的输出,就能确认标准行为:

console.log(new Date(2018,2,0)) // 输出 Wed Feb 28 2018 00:00:00 ...
console.log(new Date(2018,3,0)) // 输出 Sat Mar 31 2018 00:00:00 ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:55:59