微信小程序字符串转时间的坑

文章讲述了在微信小程序中,使用`yyyy-MM-dd`格式的时间字符串在不同设备(如苹果XR和苹果11)上处理时遇到的兼容性问题,通过正则替换解决`-`为`/`后,成功在苹果11上获取时间。

目录

一、测试环境

二、问题现象

三、总结


先说结论,字符串转时间支持yyyy/MM/dd格式,我们常见的yyyy-MM-dd格式有兼容性问题。处理方式:

new Date(dateString.replace(/-/g, "/"))

一、测试环境

微信版本8.0.40,手机苹果XR(系统版本15.2.1),苹果11(系统版本16.5.1)

二、问题现象

小程序端需要根据业务系统后台返回的时间判断与当前时间的时间差,代码如下:

//value = '2023-09-01 12:30';
let startDate = new Date(value);
console.log("startDate.getTime()",startDate.getTime());
console.log("new Date().getTime()",new Date().getTime());
let diffValue = startDate.getTime() - new Date().getTime() 
console.log("diffValue",diffValue);

在微信开发工具上测试正常,在XR真机上测试也正常,但是在同事的苹果11手机上测试很多次都不行。使用微信开发工具的预览功能,并开启调试窗口,从控制台打印的数据看到

刚开始以为是日期字符串不完整,导致获取时间失败,就把value改成了 2023-09-01 12:30:00,打印结果还是一样。在搜索js日期格式化时发现一篇文章中使用了正则替换:

function strToDate(dateStr){
	var dateStr = dateStr.replace(/-/g, "/");//现将yyyy-MM-dd类型转换为yyyy/MM/dd
	var dateTime = Date.parse(dateStr);//将日期字符串转换为表示日期的秒数
	//注意:Date.parse(dateStr)默认情况下只能转换:月/日/年 格式的字符串,但是经测试年/月/日格式的字符串也能被解析
	var data = new Date(dateTime);//将日期秒数转换为日期格式
	return data;
}

这个正则表达式是替换字符串的“-”,突然醒悟,会不会是格式的问题,会不会是格式的问题?按照文章中的方法改过之后,代码如下:

let startDate = new Date(value.replace(/-/g, "/"));
console.log("startDate.getTime()",startDate.getTime());
console.log("new Date().getTime()",new Date().getTime());
let diffValue = startDate.getTime() - new Date().getTime()
console.log("diffValue",diffValue);

改过之后发现可以正常获取时间信息了。

控制台已经正确打印出时间。

三、总结

解决办法开头已经介绍了,但是这个问题有点怪,微信版本都一样,按道理来说小程序运行的容器也应该一样,同样的程序却有不同的结果,有点坑。

微信小程序中,将字符串换为数组是一个常见的操作,通常可以使用 JavaScript 的内置方法来实现。以下是一些常用的方法: ### 使用 `split()` 方法 `split()` 方法可以根据指定的分隔符将字符串分割成一个数组。例如,如果有一个以逗号分隔的字符串,可以使用 `split(',')` 将其换为数组。 ```javascript const str = "apple,banana,orange"; const arr = str.split(","); console.log(arr); // 输出: ["apple", "banana", "orange"] ``` ### 使用 `Array.from()` 方法 `Array.from()` 方法可以将类数组对象(如字符串换为真正的数组。它适用于需要处理字符串中的每个字符的情况。 ```javascript const str = "hello"; const arr = Array.from(str); console.log(arr); // 输出: ["h", "e", "l", "l", "o"] ``` ### 使用扩展运算符 (`...`) 扩展运算符可以将字符串展开为单个字符,并将其放入数组中。 ```javascript const str = "world"; const arr = [...str]; console.log(arr); // 输出: ["w", "o", "r", "l", "d"] ``` ### 处理 JSON 字符串 如果字符串是 JSON 格式的数组(如 `"[1, 2, 3]"`),可以使用 `JSON.parse()` 方法将其换为数组。 ```javascript const str = "[1, 2, 3]"; const arr = JSON.parse(str); console.log(arr); // 输出: [1, 2, 3] ``` ### 注意事项 - **空字符串处理**:如果字符串为空或未定义,建议在换前进行检查,以避免运行时错误。 - **性能优化**:对于简单的字符分割,推荐使用 `split()` 或扩展运算符,因为它们更直观且性能较好。 通过这些方法,可以轻松地在微信小程序中将字符串换为数组,从而方便后续的数据处理和操作[^1]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值