日期上toJSON()的结果在IE8和IE9+之间不同
Result of toJSON() on a date is different between IE8 and IE9+
我正在进行从Date到string的转换,然后再转换回来,以便在sessionStorage中使用。所以我首先做这个:
sessionStorage.currentDate = myDate.toJSON();
然后我做这个:
if (sessionStorage.currentDate ) {
myDate = new Date(sessionStorage.currentDate);
}
问题是IE9+中的myDate.toJSON()
函数返回"2013-05-06T22:00:00.000Z"
,但在IE8中,它返回的"2013-05-06T22:00:00Z"
缺少末尾的小数部分。
事实是,在IE8中,后续重新转换为日期失败(new Date(sessionStorage.currentDate)
的结果是NaN
)
知道为什么会发生这种情况,以及如何使这些代码适用于IE8+吗?
更新:
我试着在调试中替换这个字符串,结果发现这两个字符串都不起作用。因此,实际上似乎是new Date(sessionStorage.currentDate)
无法识别格式(即UTC)的问题
在ES5之前,日期的解析完全依赖于实现。IE8(及更低版本)不会解析ES5中指定的ISO8601格式,所以只需自己解析即可:
// 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。
我不认为不同数量的位置是"不起作用"的情况。从…起https://en.wikipedia.org/wiki/ISO_8601#Times:
小数部分也可以被添加到三个时间元素中的任何一个。[…]分数只能添加到表示中的最低阶时间元素。表示"14小时30分半"时,不包括秒数。表示为"14:30,5"、"1430,5"、"14:30.5"或"1430.5"。小数位数没有限制但是,小数位数需要得到通信方的同意。
因此,当toJSON将时间转换为ISO-8601格式,并且您提到的两个字符串都是有效的ISO-8601时,这两个字符串似乎都是正确的——它们只是碰巧不同。
就修复而言,一个简单的正则表达式替换就可以了——只用Z
替换'.'d+Z
的所有匹配项(我假设您不需要毫秒级的精度!)。这将为您提供一个在IE8上工作的字符串,即使它是从IE9 生成的
我认为你需要对IE8特定的浏览器进行破解。为此需要额外的代码,比如。。。
if(jQuery.browser.msie && jQuery.browser.version.substring(0, 1) == 8) {
// add extra missing zero
}
- 为什么jQuery 1.8不能在IE8和InternetExplorer9中使用?(截至2012年9月的IE9最新版本)
- javascript/jQuery:在title中添加换行符——在IE9中有效,但在IE8中无效
- Angularjs 跨源资源共享 (CORS) 发布或放置方法在 IE8 和 IE9 中不起作用
- XDomainRequest (CORS) for XML 导致 IE8 / IE9 中的“访问被拒绝”错误
- IE8或IE9-支持多文件选择上传,无需Flash和HTML5
- IE8/IE9检测是否启用了第三方cookie,如果没有,则启用
- IE8不允许javascript引用,但IE9允许
- IE9中的有效输出,但IE7/IE8中的未定义输出
- IE8 与 IE9 兼容性
- Request.UrlReferrer在IE8中无法正常工作,并且工作正常IE9
- 谷歌图表适用于IE7,但不适用于IE8或IE9
- OnBeforeUnload ajax 请求在 IE8 和 IE9 上不起作用
- 带有 Wordpress 主题的 ie8 和 ie9 中的 Jquery 错误.(对象不支持此属性或方法)
- iframe 内容在 IE8 - IE9 中完全加载
- ExtJs-IE8+IE9上的文件上载错误
- IE8/IE9中的跨原点标头
- 在ie8, IE9中发送图像数据到服务器
- 带有localhost或LAN服务器名称的IE8/IE9上的localStorage;不起作用
- 不能执行自由脚本中的代码- IE6 IE7 IE8 IE9
- 如何使用CSS3转换整个页面,并支持IE8, IE9