首页 > 代码库 > 关于setMonth中的bug

关于setMonth中的bug

    想到下个周末要去拓展,没时间更新博文,今天晚上就在写一篇吧。昨天是31号,这个日期有点特殊,公司平台的签到也出现了问题,这个问题其实半年前已经出现了,当初看了下源码,没看出个所以然,然后就放着没去管它,最近公司平台的积分商城准备上线了,签到的积分也有用了,那么这个bug不解决也不行了。

    说了那么多大家可能还不知道什么问题吧。文采不好请见谅哈。大家应该都知道setMonth吧。设置月份。下面来看一个例子:

    var taday = new Date();

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

    alert(taday.getMonth());

    现在是11月1号,那么出来的结果大家都应该很清楚是11(月份是从0开始的,),但如果把电脑的时间设置成10月31号,得出来的结果会是10吗?试过的应该知道他不会打印出10.而是打印出11,为什么会这样呢?原因就在于js计算的时候把一个月计算为30天,多出的一天自动溢出,算到下个月,也就是变成了11月,再加1就变成了12月那么打印出来就变成了11。怎么解决这个问题了,很显然,既然没有js里没有31号,那么我们就该一下日期,设置成1号,那么时间就不会溢出了。

    var taday = new Date();

    taday.setData(1);

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

    alert(taday.getMonth());

这样就解决了setMonth在31号出现的问题。这个问题昨天弄了一整天终于明白了,其实基本上的时间都是看逻辑,看来看去都没问题,最后才想到会不会是setMonth的问题,打印出来后发现果然是这个问题,白白浪费了那么多时间,想想都不值,要是早知道这个问题就不会花这么多冤枉的时间了。

关于setMonth中的bug