美文网首页
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://zhuanlan.zhihu.com/p/22253858 来源:知乎 著作...

  • JS Date

    Date对象是JS提供的日期和时间操作接口。 静态方法 Date.now() Date.parse() 解析日期的...

  • js里的时间函数

    Js获取当前日期时间及其它操作 var date = new Date();date.getYear(); ...

  • 15 js10 date对象

    date日期对象:js内置对象,使用构造函数创建; 1、var date = new Date();//创建对象;...

  • Date及其对象常用方法

    我们知道js自带了众多接口,Date也是其中之一 Date用于表示日期和时间,通过new Date()可以创建日期...

  • JS Date日期对象

    Date实例继承自Date.prototype。可以通过修改构造函数的原型对象来影响Date实例继承的属性和方法。...

  • js日期对象 Date

    日期对象,是系统提供好的var date=new Date(); js定时器 setInterval();setT...

  • JS总结概要

    1.JS事件 2.js内置对象 2.1Date 日期对象 var d = new Date(2012, 10, 1...

  • 2016.12.1 JS

    日期时间对象 var date=new Date() new:关键字 作用:创建对象 Date是个js内置的构造...

  • fullcalendar fancybox 使用中出现问题总结

    查询的日期的js var monthtext = $("#startDate").val(); var date ...

网友评论

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

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