我正在执行从Date到字符串的转换,然后再转换为在sessionStorage中使用。所以我首先这样做:
sessionStorage.currentDate = myDate.toJSON();
然后我这样做:
if (sessionStorage.currentDate ) { myDate = new Date(sessionStorage.currentDate); }
问题在于, IE9 +* 中的myDate.toJSON()函数将返回,但在IE8中,它将返回缺少结尾的小数部分。事实是,在IE8中,随后的重新转换均无法转换为日期(结果为) *"2013-05-06T22:00:00.000Z"``"2013-05-06T22:00:00Z"``new Date(sessionStorage.currentDate)``NaN
myDate.toJSON()
"2013-05-06T22:00:00.000Z"``"2013-05-06T22:00:00Z"``new Date(sessionStorage.currentDate)``NaN
知道为什么会发生这种情况以及如何使此代码适用于IE8 +吗?
我尝试在调试中替换字符串,结果发现这两个字符串都不起作用。因此,实际上似乎是new Date(sessionStorage.currentDate)无法识别格式的问题(以UTC为单位)
new Date(sessionStorage.currentDate)
在ES5之前,日期的解析完全取决于实现。IE 8(及更低版本)不会解析ES5中指定的ISO 8601格式,因此您可以自己解析:
// parse ISO format date like 2013-05-06T22:00:00.000Z function dateFromISO(s) { s = s.split(/\D/); return new Date(Date.UTC(s[0], --s[1]||'', s[2]||'', s[3]||'', s[4]||'', s[5]||'', s[6]||'')) }
假设字符串为UTC。