目录
一、测试环境
二、问题现象
三、总结
先说结论,字符串转时间支持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);
改过之后发现可以正常获取时间信息了。
控制台已经正确打印出时间。
三、总结
解决办法开头已经介绍了,但是这个问题有点怪,微信版本都一样,按道理来说小程序运行的容器也应该一样,同样的程序却有不同的结果,有点坑。