您目前如何解析ISO8601日期,例如JavaScript中的 2010-02-23T23:04:48Z
有些浏览器在使用下面的代码时返回NaN(包括Chrome),但FF3.6 +可以正常工作。
<html>
<body>
<script type="text/javascript">
var d = Date.parse("2010-02-23T23:04:48Z");
document.write(d);
</script>
</body>
</html>
您可以在http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parse
尝试此操作答案 0 :(得分:9)
这是一个很好的实现,涵盖边缘情况并回退到本机实现。 https://github.com/csnover/js-iso8601/
答案 1 :(得分:4)
答案 2 :(得分:3)
正如其他人所说,它不在第3版规范中。然而,它是在第5版规范中,我引用:
ECMAScript根据ISO 8601扩展格式的简化为日期时间定义字符串交换格式。格式如下: YYYY-MM-DDTHH:mm:ss.sssZ
所以它应该很快进入浏览器(IE9,Chrome 1,Firefox 4至少是一些支持ISO 8601日期的浏览器)。如果您想在此期间实施解决方案,您可能希望进行优化,以便您的脚本可以利用本机(如果可用):
(function ()
{
if (isNaN(Date.parse("2010-02-23T23:04:48Z")))
{
var oldParse = Date.parse;
Date.parse = function (strTime)
{
// regex test strTime for ISO 8601, use oldParse if it isn't
// Use custom parser if it is.
}
}
})();
答案 3 :(得分:2)
关于标题中的问题:不是本地的(因为你已经测试过:))
在ECMA-262(3 / e)中,Date.parse
[15.9.4.2] 的唯一要求是通过.toString()
和{{1}进行往返转换}不会更改Date对象,即
.toUTCString()
并且 Date.parse(x.toString()) == Date.parse(x.toUTCString()) == x
[15.9.5.2] 和.toString()
[15.9.5.42] 都是依赖于实现的,所以格式为{{ 1}}解析完全没有指定。