作者:坚强一点
链接: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);
解决问题。