问题代码:
var date = new Date('2019-2-2 2:2:2');
现象:
安卓手机正常展示,苹果手机展示NaN
兼容性测试:
chrome正常,IE和safari返回错误"Invalid Date"
原因分析:
想着估计是'2019-2-2 2:2:2'字符串格式的问题,改成'2019/2/2 2:2:2'再测试,结果正常,以为这样应该没问题了,再用手机浏览器继续访问,android正常,iPhone继续报错。
解决:
var handleDate = "2019/2/2 2:2:2".split(/[- : /]/);
date = new Date(handleDate[0], handleDate[1]-1, handleDate[2], handleDate[3], handleDate[4], handleDate[5]);
结论:
iPhone中的safari无法解释 YYYY-MM-DD HH:mm:ss 或者YYYY/MM/DD HH:mm:ss这样的时间格式,而谷歌火狐等浏览器对这样的格式做了扩展。
iPhone中的safari所支持的格式为 YYYY,MM, DD,HH,mm,ss。
这里提供一个函数,用来解决关于safari中new Date() 参数是字符串无法解析的问题:
getDate(dateStr) {
let dateArr = dateStr.split(/[- : \/]/);
return new Date(dateArr[0], dateArr[1] - 1, dateArr[2], dateArr[3], dateArr[4], dateArr[5]);
}