javascript使用Date对象setMonth生成指定日期的时间戳时月份错误的问题

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-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值