原生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
    评论
### 回答1: 使用 JavaScript 获取当前日期的前一月的日期字符串,可以使用以下代码: ``` var date = new Date(); date.setMonth(date.getMonth() - 1); var previousMonth = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear(); console.log(previousMonth); ``` 代码,首先创建了一个 Date 对象,然后使用 setMonth() 方法将月份减 1,最后使用 getMonth()、getDate()、getFullYear() 方法获取前一月的月份日期和年份,拼接成日期字符串输出。 ### 回答2: 要使用JavaScript获取当前日期的前一个月的日期字符串,需要按照以下步骤进行操作: 1. 使用Date对象获取当前日期的年份和月份。 2. 将获取的年份和月份分别存储在变量。 3. 判断当前月份是否为1月份,如果是,则要将年份减1,设置月份为12。 4. 如果当前月份不是1月份,则将月份减1。 5. 使用字符串拼接的方式创建前一个月的日期字符串:将年份和月份换为字符串格式,并为月份补0(例如,将4月换为"04")。 6. 最后得到的字符串包括年份和月份,可以作为前一个月的日期字符串。 下面是一段示例代码,展示了如何实现以上操作: ```javascript // 获取当前日期 var currentDate = new Date(); // 获取当前月份和年份 var currentMonth = currentDate.getMonth() + 1; var currentYear = currentDate.getFullYear(); // 判断当前月份是否为1月份,若是,则设置为12月份,年份减1 if (currentMonth === 1) { currentMonth = 12; currentYear--; } else { currentMonth--; } // 将年份和月份换为字符串,并补0 var previousMonth = currentYear.toString() + (currentMonth < 10 ? '0' + currentMonth : currentMonth.toString()); console.log(previousMonth); // 输出前一个月的日期字符串,例如:"202211" ``` 以上代码在控制台输出的结果是前一个月的日期字符串,例如:"202211"。你可以根据需求自行调整代码,在前一个月日期字符串的格式上进行更改。 ### 回答3: 在JavaScript,可以使用Date对象来获取日期时间信息。我们可以通过Date对象的方法来获取当前日期的前一个月的日期字符串。 首先,我们可以创建一个新的Date对象,它会自动设置为当前日期时间。例如: ``` var currentDate = new Date(); ``` 然后,我们可以使用Date对象的`getMonth()`方法来获取当前日期月份,并将其减去1来获取前一个月的月份。注意,`getMonth()`方法返回的月份是基于0的索引,所以需要将结果加1来得到实际的月份。例如: ``` var month = currentDate.getMonth() - 1 + 1; ``` 接下来,我们可以使用Date对象的`getFullYear()`方法和`getDate()`方法分别获取当前日期的年份和日期。例如: ``` var year = currentDate.getFullYear(); var day = currentDate.getDate(); ``` 然后,我们可以根据获取到的年份、月份日期来构造前一个月的日期字符串。但是需要注意的是,如果当前月份是1月的话,前一个月应该是去年的12月。所以需要进行判断并处理。例如: ``` if (month === 0) { month = 12; year -= 1; } ``` 最后,我们可以将获取到的年份、月份日期拼接成日期字符串。例如: ``` var previousMonthDate = year + '-' + month + '-' + day; ``` 这样,我们就成功获取到了当前日期的前一个月的日期字符串。 完整的代码如下: ```javascript var currentDate = new Date(); var month = currentDate.getMonth() - 1 + 1; var year = currentDate.getFullYear(); var day = currentDate.getDate(); if (month === 0) { month = 12; year -= 1; } var previousMonthDate = year + '-' + month + '-' + day; console.log(previousMonthDate); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值