【问题标题】:How to convert date time saved in New York timezone to local time zone in javascript?如何将保存在纽约时区的日期时间转换为javascript中的本地时区?
【发布时间】:2019-09-05 23:35:33
【问题描述】:

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

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

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

在 Chrome 上,可以通过在日期末尾附加 GMT-4

来实现预期输出
new Date("2019-04-15 19:09:16 GMT-4")

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

【问题讨论】:

  • 感谢@MattJohnson 的快速回复,我已经添加了有关此问题的更多详细信息。请你再看一遍。

标签: javascript date datetime time timezone


【解决方案1】:

如果您确实知道偏移量是 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()

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

【讨论】:

  • 感谢@Matt,非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 2021-05-02
  • 1970-01-01
  • 2019-01-14
  • 2012-01-28
  • 2020-05-24
  • 1970-01-01
相关资源
最近更新 更多