【问题标题】:momentjs is not returning same output for same timezone in different input formatmomentjs 没有以不同的输入格式返回相同时区的相同输出
【发布时间】:2018-06-26 09:16:18
【问题描述】:

我在使用 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 没有给出正确的日期时间。

感谢您的帮助。

【问题讨论】:

  • 纽约在冬季是UTC-5,在夏季是UTC-4。见daylight saving time
  • 但是为什么语句 1 和语句 3 在解析相同的日期时间时分别给出 UTC-5 和 UTC-4。
  • 第一个是解析,第三个是使用月份为零索引的构造函数。请注意最终输出:2 月 15 日在 1 日和 3 月 15 日在 3 日。
  • 区别在于第一个日期是二月,在夏令时之外,而第二个日期是六月,在夏令时之内。所以UTC偏移量分别是-5和-4。
  • 感谢@Phylogenesis

标签: javascript node.js datetime timezone momentjs


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多