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