其实耶谈不上什么BUG,只是JS Date对象对溢出时间进行了自己的处理。
首先把你的系统时间设为2013年1月31号,这一步很重要,不然可能不会发生这个BUG,然后执行下面的代码
代码如下 | 复制代码 |
var t = new Date(); t.getMonth(); //输出0,现在获取的是正确的值,因为getMonth是从0开始索引的 t.setMonth(3); //设置月份为4月 t.getMonth(); //输出4,这里本应该输出3的var t = new Date(); t.getMonth(); //输出0,现在获取的是正确的值,因为getMonth是从0开始索引的 t.setMonth(3); //设置月份为4月 t.getMonth(); //输出4, |
这里本应该输出3的你会发现,你明明设置了Month值为3,但getMonth时候却输出4。此时,你可能会比较疑惑。我们再来看看现在的时间
代码如下 | 复制代码 |
console.log(t); //Wed May 01 2013 11:47:31 GMT+0800 (CST)console.log(t); //Wed May 01 2013 11:47:31 GMT+0800 (CST)setMonth(3) |
指定设置日期到4月份,但4月份只有30天,此时的时间是2013-04-31,但4月并没有31天。所以js对溢出日期进行了处理,自动将月份设到5月1号
针对这个问题也很好解决,只要在setMonth之前把日期设置到每月都有的日期,1-28都可以。
代码如下 | 复制代码 |
var t = new Date(); t.setDate(1); t.setMonth(3); t.getMonth();//输出3 |
时间: 2024-09-20 07:37:51