【发布时间】:2021-10-19 05:11:15
【问题描述】:
似乎在 Javascript 中定义 ISO 日期格式存在问题。据我了解,ISO 格式的日期可以包括 TZ 偏移量,包括小时、分钟和秒,例如:
1919-07-01T00:00:00+04:31:19
尝试使用 JavaScript new Date() 对象解析此类日期时间字符串会导致错误:
new Date('1919-07-01T00:00:00+04:31:17').toLocaleDateString('ru-RU') => "Invalid Date"
new Date('1919-07-01T00:00:00+04:31').toLocaleDateString('ru-RU') => "01.07.1919"
示例中指定的日期来自 Java 后端客户端/POSTGRESQL 数据库,其中表示“1919-07-01T00:00:00+04:31:17”被视为有效的 ISO 日期。 如果我们查看以下有关夏令时更改的数据,则可以理解日期在时区偏移中包含“秒”的原因: https://www.timeanddate.com/time/change/russia/moscow?year=1919
是否有任何建议为什么无法克服此限制或问题的根源在哪里?
【问题讨论】:
-
en.wikipedia.org/wiki/ISO_8601#Times 并没有说秒在时区有效。
1919-07-01T00:00:00+04:31:19是无效的日期字符串。 -
时区莫斯科时间/UTC+03:00。问题是对于低于 01.07.1919 的日期,它将具有偏移 +04:31:17
-
@evolutionxbox Wiki 说“ISO 8601 中的时区表示为本地时间(未指定位置)、UTC 或与 UTC 的偏移量。”不幸的是,我没有找到在线可用的原始 ISO 规范文本
-
ISO 8601 可能不会在 UTC 偏移中指定秒数,这就是解析器不“期望”它的原因 - 然而,存在这样的偏移,对于给定的 tz,另请参阅 @987654323 中的相应部分@ 代表欧洲/莫斯科
-
用法:那些秒与闰秒无关。
标签: javascript postgresql datetime