let date = new Date();
date.setYear(2021);
date.setMonth(3);//月份从0开始,3代表4月
date.setDate(1);
console.log(date);
最近遇到了这样一个问题:
这个代码,在3月30日测试时,输出的时间是4月1日,然后3月31日项目上线了,发现出了bug,一检查发现输出变成了5月1日。
当时发现把本地时间改成3月30日,输出就是4月1日,是对的。然后把本地时间调回3月31日,输出又变成了5月1日。
原来因为new Date()是生成了一个当前时间的对象,也就是2021年3月31日,然后date.setMonth(3)时,就要变成2021年4月31日,但是4月没有31日,所以就变成了5月1日。同理,如果执行setMonth(1)的话,2月只有28日,就会变成3月3日。
处理方法是想要得到4月1日,就调用setMonth(3, 1),直接传入第二个参数。
需要注意的是,Date还有setHour、setMinutes、setSeconds等方法,这些方法都可以传入比较大的值,比如setHour(30),会输出指定日期的后一天的凌晨6点(30-24=6)
趣闻:当时和同事讨论这个问题,还异想天开是不是遇到了千年虫问题。最后问题解决了,同事说了句:果然每次怀疑平台出了问题,最后往往是我们自己代码的问题,-v-