javscript Date对象setMonth()方法的诡异bug

在项目中前几个月写过一个日历组件。结果今天测试部门报告说有bug, 经仔细查看代码,发现调用setMonth这个Date对象的方法时,返回的值不一定是正确的值。

把你的本地系统日期调整至2013年1月31日,再接着测试以下代码

var d = new Date();
d.setMonth(8);
d.getMonth();//输出9

你会发现,你明明设置了Month值为8,但getMonth时候却输出9。why?

查了一个早上bug,才发现是这个方法出问题。。后到stackoverflow上去问了一下,原因如下

因为本地系统时间是2013-1-31

setMonth(8)指定设置日期到8月份,但8月份只有30天,并没有31天,所以溢出了。js会自动将月份设到下一个月去。。

坑爹啊。解决方案是在调用setMonth之前先调用setDate(1)设置一下日期,设置一个比较小的日期就行比如设到1号。。

像这样

var d = new Date();
d.setDate(1);
d.setMonth(8);
d.getMonth();//输出8

 

posted @   池中物王二狗  阅读(879)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
转载入注明博客园 王二狗Sheldon Email: willian12345@126.com https://github.com/willian12345
点击右上角即可分享
微信分享提示