我正在从第三方网站获取以纽约时区 (GMT -4) 格式存储为字符串的日期时间。我想使用 javascript 将其转换为本地时区。日期时间按以下格式保存
"2019-04-15 19:09:16">
我知道我可以通过 MomentJS 实现这一目标,但我想知道除了加载所有库以将日期时间转换为本地时区之外,是否有任何简单的解决方案。
在Chrome上,可以通过在日期末尾附加GMT-4来实现预期的输出,并且
new Date("2019-04-15 19:09:16 GMT-4")
但是由于格式无效,此解决方案不适用于Firefox。
如果您实际上知道偏移量是 UTC-4,那么您只需要重新格式化字符串以符合 ECMAScript 日期时间字符串格式,这是对 ISO 8601 扩展格式的简化。
new Date("2019-04-15T19:09:16-04:00")
但是,请注意,纽约使用的是美国东部时间,这实际上是您提供的日期和时间的夏令时。 换句话说,它不是UTC-4(EST),而是UTC-5(EDT)。 因此,对于该示例,它应该是:
new Date("2019-04-15T19:09:16-05:00")
但是,如果您不知道特定日期和时间给定时区的哪个偏移量怎么办?毕竟,时区、夏令时转换和相关偏移量在世界各地都是不同的,并且在历史上发生了变化。 因此,不能仅仅假设一个时区有一个数字作为它的偏移量。 (在时区标签维基的"时区!=偏移量"下阅读更多内容。
目前,JavaScript 本身无法帮助您。 相反,您需要使用库,例如此处引用的库。
例如,使用 Luxon,您可以执行以下操作:
luxon.DateTime.fromISO("2019-04-15T19:09:16", { zone: "America/New_York" }).toJSDate()
在未来,我们希望通过 Temporal 对象在 JavaScript 语言中解决这个问题——这些对象仍处于 ECMAScript 提案阶段。