尝试在Javascript中解析ISO-8601格式的字符串时,我注意到当偏移量缺少分钟部分时,它无法解析字符串。 E.g:
Date.parse("2014-05-16T07:28:51.148412+02")
结果评估为NaN
,而
Date.parse("2014-05-16T07:28:51.148412+02:00")
评估为1400218131148
。这让我感到困惑,因为NodaTime(没有生成分钟的字符串)和Javascript似乎都支持ISO-8601。有趣的是,不同的来源对是否需要分钟部分做出了不同的陈述:Wikipedia表示它是可选的,而this document表示不是。
那么正确的规格是什么?我是否应该为NodaTime提交一个他们不符合标准的错误?什么是解决方法?我似乎无法让NodaTime在几分钟内产生偏移量。
答案 0 :(得分:2)
Noda Time遵循ISO 8601规范(如果您不想购买它,您可以免费找到规范草案)。但是,Javascript中的Date
对象不遵循ISO 8601,而是基于标准的格式。
如果您查看ECMA-262规范(适用于Javascript),您会发现Date.parse
必须了解所谓的Date Time String Format。它“基于ISO 8601扩展格式的简化”,并要求时区说明符(如果存在)为Z
,+hh:mm
或-hh:mm
。
答案 1 :(得分:1)
有关标准的信息,请参阅@ Rhymoid的答案。我只是添加了我最终用JavaScript解析ISO-8601格式日期的解决方案。
有一个名为Moment.js的库,可以解析ISO-8601:
moment("2014-05-16T07:28:51.148412+02")
返回具有指定偏移量的有效日期对象。