一尘不染

IE8和IE9 +上日期的toJSON()结果不同

json

我正在执行从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

知道为什么会发生这种情况以及如何使此代码适用于IE8 +吗?

更新:

我尝试在调试中替换字符串,结果发现这两个字符串都不起作用。因此,实际上似乎是new Date(sessionStorage.currentDate)无法识别格式的问题(以UTC为单位)


阅读 319

收藏
2020-07-27

共1个答案

一尘不染

在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。

2020-07-27