Date setmonth的问题

    说起javascript里的Date对象,大家肯定不会陌生,Date提供了丰富日期api,今天本文单独讨论一个api--setMonth

当需要设置月的时候,一般都是执行如下代码:

var d = new Date('2016-10-31');
// 假如设置月份为9,则需要设置 -1
d.setMonth(8);
// 再直接获取月份数
d.getMonth();

按照预期,返回应该为8,此时获取的返回为9,按照一般的编程思路,set后get获得的应该是当前set的值。

为什么会出现如上的情况?

我们就来解释一下,以上setMonth内部发生了什么。

d.setMonth(8);

执行后得到 2016-9-31,然而9月并没有31日,所以内部又执行了,

d.setDate(31);

所以得到的结果是2016-10-01。

这里大家使用的时候需要注意。

如果需要设置为前一月应该如何处理呢?

var d = new Date('2016-10-31');
// 先将date设置为1
d.setDate(1); 
// 假如设置月份为9,则需要设置 -1
d.setMonth(8);
// 再直接获取月份数,此时返回为9
d.getMonth();

这里可以说是一个setMonth的一个坑,大家可以用以上方法避过哈。

Table of Contents