Sym - 一个用 Java 实现的现代化社区平台 • 源码 • 注册

Pipe - 小而美的开源博客平台 • 体验 • 皮肤
Solo - 一个用 Java 实现的博客系统,为你或你的团队创建个博客吧! • 源码下载 
Wide - 一个基于 Web 的 Go 语言 IDE • 教程试用

JavaScript Date.setMonth bug

每天写着应用的代码, 就好像 robot 一样. 以至于又忙又没有研究一些东西又没写博客.


今天发现了一个 JS Date 的 bug. 终于可以有写的了


bug 描述:

var d = new Date();

在使用 d.setMonth(m) 时,按照预期 d.getMonth() === m,可在某些特殊情况下,d.getMonth()  > m, d.getDate() = 1


特殊情况总结:

d.getDate() 大于 m+1 月份的总天数

举例:

var d = new Date();    // 今天是 2013年10月31号

d.setMonth(1); // 设置月份为 2 月,2 月份总天数为 28 或 29,都小于 31

d.getMonth(); // d.getMonth() = 2; d 为 2013 年 3 月 1 号

d.getDate(); // d.getDate() = 1; d 为 2013 年 3 月 1 号




解决方案:

在 d.setMonth(m) 之前加上 d.setDate(1)

如:

var d = new Date(); // 今天是 2013年10月31号

d.setDate(1);

d.setMonth(1); // 设置月份为 2 月

var currentMonth = d.getMonth(); // currentMonth 值为 1







欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

推荐阅读
留下你的脚步