美文网首页
js Date 日期使用上的一个坑

js Date 日期使用上的一个坑

作者: 坚强一点 | 来源:发表于2016-08-31 15:11 被阅读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);

    解决问题。

    相关文章

      网友评论

          本文标题:js Date 日期使用上的一个坑

          本文链接:https://www.haomeiwen.com/subject/aqnqettx.html