js Date 日期使用上的一个坑

2016-08-31  本文已影响0人  坚强一点

作者:坚强一点

链接:https://zhuanlan.zhihu.com/p/22253858

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在写js 日历插件的时候遇到一个奇怪的情况。

日历当前的日期是 2016-08-31 号 用  js Date 类型保存的当前日期

var currDate = new Date(); // 初始化的时候的当期日期,

当我点击下一个月的时候,直接取出当期日期的月份,然后 +1

直接重置 currDate 的月份 的代码ru

currDate.setMonth(currDate.getMonth() + 1);

在大部分情况下这种做法是没有问题的。

但是如果当前月份是 2016-08-31 的时候,我取出当期月份然后+1最后的结果是2016-10-01

月份增加了2月,而不是想象中的只增加了一个月,如果细心的人已经发现了,日期的天数变化,从31号变到了1号,其实问题也就出现在这里。

因为当我使用“currDate.setMonth(currDate.getMonth() + 1);”这段代码重置月份的时候,

最后的结果是 2016-09-31,但是实际情况是,2016-09月份的时候只要30填,没有31号,所以日期就自动往后延期了一天变成了2016-10-01

所以最后我把重置的代码改成了如下

currDate.setMonth(currDate.getMonth() + 1);

currDate.setDate(1);

手动吧日期放到了第一天,心想这下应该没问题了。结果实际情况一点都没变。还是从2016-08-31 直接跳到了2016-10-01。

其实问题还是一样的情况,因为在执行 currDate.setMonth(currDate.getMonth() + 1); 这段代码的时候  currDate 已经是  2016-10-01 号了,这个时候在执行

currDate.setDate(1);这段代码的时候 只是吧 当前月份的日期重置到了1号,所以没有任何变化。

最后把代码改成了

currDate.setDate(1);

currDate.setMonth(currDate.getMonth() + 1);

解决问题。

上一篇下一篇

猜你喜欢

热点阅读