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的一个坑,大家可以用以上方法避过哈。