我正在从第三方网站获取以纽约时区(GMT -4)格式存储为字符串的日期时间。我想使用javascript将其转换为本地时区。日期时间以以下格式保存
“ 2019-04-15 19:09:16”
我知道我可以通过MomentJS做到这一点,但我想知道除了加载所有库以将日期时间转换为本地时区之外,是否还有任何简单的解决方案。
在Chrome上,通过在日期末尾添加 GMT-4 可以实现预期的输出,
new Date("2019-04-15 19:09:16 GMT-4")
但是由于格式无效,该解决方案在Firefox上不起作用。
答案 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提案阶段。