如何在javascript中将保存在纽约时区的日期时间转换为本地时区?

时间:2019-04-15 23:18:07

标签: javascript date datetime time timezone

我正在从第三方网站获取以纽约时区(GMT -4)格式存储为字符串的日期时间。我想使用javascript将其转换为本地时区。日期时间以以下格式保存

  

“ 2019-04-15 19:09:16”

我知道我可以通过MomentJS做到这一点,但我想知道除了加载所有库以将日期时间转换为本地时区之外,是否还有任何简单的解决方案。

在Chrome上,通过在日期末尾添加 GMT-4 可以实现预期的输出,

new Date("2019-04-15 19:09:16 GMT-4")

但是由于格式无效,该解决方案在Firefox上不起作用。

1 个答案:

答案 0 :(得分:0)

如果您实际上知道偏移量是UTC-4,则只需要重新格式化您的字符串即可使其符合ECMAScript Date Time String Format,这是ISO 8601扩展格式的简化。

new Date("2019-04-15T19:09:16-04:00")

但是请注意,纽约是美国东部时间,实际上是您提供的日期和时间在daylight saving time中。换句话说,它不是UTC-4(EST),而是UTC-5(EDT)。因此,对于该示例,应为:

new Date("2019-04-15T19:09:16-05:00")

但是,如果您不知道特定日期和时间给定时区的偏移量,该怎么办?毕竟,时区,夏令时过渡以及相关的偏移在全世界范围内都是不同的,并且在整个历史中都在变化。因此,不能仅仅假设时区的偏移量就是一个数字。 (在the timezone tag wiki的“时区!=偏移”下阅读更多内容。)

目前,JavaScript本身无法帮助您。相反,您需要使用一个库such as the ones referenced here

例如,使用Luxon,您可以执行以下操作:

luxon.DateTime.fromISO("2019-04-15T19:09:16", { zone: "America/New_York" }).toJSDate()

将来,我们希望通过JavaScript语言Temporal解决此问题-这些对象仍处于ECMAScript提案阶段。