首页 > 解决方案 > momentjs 没有以不同的输入格式返回相同时区的相同输出

问题描述

我在使用 moment js 库时遇到问题。

let moment = require("moment-timezone")

date = '02/15/2018 5:00 PM'
fmt = 'MM/DD/YYYY hh:mm A'
timezone = 'America/New_York'

moment.tz(date, fmt, timezone) //Statement 1

输出> moment.parseZone("2018-02-15T17:00:00.000-05:00")

moment().tz(timezone) //Statement 2

输出> moment.parseZone("2018-06-26T04:33:51.173-04:00")

两个语句都使用相同的时区,但时差与 UTC 不同。第一个显示 5 小时时差,第二个显示 4 小时时差。

如果我使用以下格式,那么它会显示正确的日期时间。

moment.tz({year:2018, month:2, day:15, hour:17}, timezone) //statement3

输出> moment.parseZone("2018-03-15T17:00:00.000-04:00")

我无法理解为什么声明 1 没有给出正确的日期时间。

谢谢您的帮助。

标签: javascriptnode.jsdatetimetimezonemomentjs

解决方案


不同之处在于第一个日期是在 2 月,在夏令时之外,而第二个日期是在 6 月,在夏令时之内。因此,每个日期的 UTC 偏移量分别为 -5 和 -4 小时。

请记住,大多数时区的 UTC 偏移量会随一年中的时间而变化,切勿在您的代码中假设一个固定的偏移量。


推荐阅读