本文探讨JavaScript中Date对象在iOS Safari浏览器中解析标准时间字符串时返回Invalid Date的问题。通过分析发现Safari对YYYY-MM-DD格式支持有限,需将字符串分割为年月日等参数传入Date构造函数以实现跨浏览器兼容。
var date = new Date('2016-11-11 11:11:11');
document.write(date);
Safari浏览器Date解析异常现象
近期开发时间判断脚本时,需将固定格式的字符串转换为时间戳进行比对。调试阶段使用Chrome浏览器,代码逻辑基本完成后运行正常。
切换至其他浏览器测试时,发现IE与Safari浏览器无法兼容,控制台报错显示为“Invalid Date”。
推测可能是字符串格式不符合规范,尝试修改为“2016/11/11 11:11:11”格式后测试通过。然而,在手机端继续访问时,Android设备显示正常,而iPhone设备依然报错。
再次尝试修改为“Nov 11 2016 11:11:11”格式,结果仍然报错,无论怎样调整格式均无法解决。
经过多方排查,最终在技术论坛上找到一种可行的解决方案。
跨浏览器兼容解决方案
var arr = "2016/11/11 11:11:11".split(/[- : \/]/),
date = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]);
document.write(date);
该方案实现了所有浏览器的兼容,具体结论如下。
iPhone中的Safari浏览器无法正确解析“YYYY-MM-DD HH:mm:ss”或“YYYY/MM/DD HH:mm:ss”这类时间格式,而Chrome、Firefox等浏览器对此类格式进行了扩展支持。
iPhone中的safari所支持的格式为 YYYY,MM, DD,HH,mm,ss,这个问题纠结我大半天,真的好想把苹果的程序员拉出去枪毙10分钟,太TM特立独行了。气人
以上介绍了JS在iOS Safari中不兼容Date()问题的解决方法,希望能帮助到有需要的开发者。如有任何疑问,欢迎留言交流,小编会及时回复。感谢大家对本站的支持!