对于日期而言,toJSON()的结果在IE8和IE9 +之间是不同的

Mau*_*ark 11 javascript datetime json internet-explorer-8

我正在进行从Date到string的转换,然后返回在sessionStorage中使用.所以我先这样做:

sessionStorage.currentDate = myDate.toJSON();
Run Code Online (Sandbox Code Playgroud)

然后我这样做:

if (sessionStorage.currentDate ) {
    myDate = new Date(sessionStorage.currentDate);
}
Run Code Online (Sandbox Code Playgroud)

问题是IE9 +中的myDate.toJSON()函数返回但在IE8中它返回结束时缺少小数部分.事实是,在IE8失败的随后的再转换成日期(结果从是)"2013-05-06T22:00:00.000Z""2013-05-06T22:00:00Z"new Date(sessionStorage.currentDate)NaN

知道为什么会这样,以及如何使这个代码适用于IE8 +?

更新:

我试图在debug中替换字符串,结果发现2个字符串都不起作用.所以它实际上似乎是一个new Date(sessionStorage.currentDate)无法识别格式的问题(是UTC)

Rob*_*obG 12

在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]||''))
}
Run Code Online (Sandbox Code Playgroud)

假设字符串是UTC.