获取月末最后一天:输出结果与预期不符
为什么获取月末日期的结果和你查到的旧解答不一致?
首先得明确一个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
相关产品推荐
相关产品推荐

