原生js 时间字符串转日期,月份错误(setMonth)

前几天写了一个简单的html,需要字符串转日期,想的不用第三方了,自己写了个,如下:


			function parseDateStr(dateStr) {
				let date = new Date();
				date.setFullYear(parseInt(dateStr.substr(0, 4)));
				let month = parseInt(dateStr.substr(4, 2)) - 1;
				date.setMonth(month);
				date.setDate(parseInt(dateStr.substr(6, 2)));
				date.setHours(parseInt(dateStr.substr(8, 2)));
				date.setMinutes(parseInt(dateStr.substr(10, 2)));
				date.setSeconds(parseInt(dateStr.substr(12, 2)));
				date.setMilliseconds(0);
				return date;
			}

本来 功能写好了,今天准备交上去,一侧试,发现有问题,于是开始排查,

发现这样的时间字符串有问题,20220601000000,每次转日期总是转成7月份,也就是2022年7月1日,真是活见鬼,明明月份减一了,于是测试20220531000000,发现没有问题。

郁闷了很久,才发现今天是5月31日,当再代码中 new Date()的时候,日期是31,当我先给年赋值,再给月份赋值6月份的时候,当前的date日期还是31,而6月份没有31日,于是date会判定跨月了,所以才会变成7月份,所以应该先给日赋值,再给月赋值。修改以后代码如下:

---------------------------------------------------------------------------------------------------------------------------------

本以为问题解决了,现在6月1号,转5月31日的字符串,会自动跳到5月初,最好办法是吧new Date()初始化下,如下:

  至此,问题解决,假如帮到了你,请点个赞吧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值