NodeTime中ISO-8601格式值的偏移格式来自何处?

时间:2014-05-23 11:55:45

标签: javascript iso8601 nodatime

尝试在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在几分钟内产生偏移量。

2 个答案:

答案 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")

返回具有指定偏移量的有效日期对象。