【问题标题】:Moment Timezone: UTC offset difference时刻时区:UTC 偏移差异
【发布时间】:2016-08-24 16:58:18
【问题描述】:

我使用 moment-timezone v.0.5.3-2016c 库来计算时区的 UTC 偏移量:

var z = moment().tz("America/Los_Angeles");
z.utcOffset(); // -420 mins or -7 hours

// check if DST is shifted
z.isDSTShifted(); // false

但是这里https://en.wikipedia.org/wiki/List_of_tz_database_time_zonesAmerica/Los_Angeles 的UTC 偏移量是-8 小时。

Moment 也使用 tzdb v.2016c 和维基百科文章。

那么,为什么这里有两个不同的结果?哪个结果是正确的?

P.S.:America/Kentucky/MonticelloEurope/Tiraspol 也有同样的区别。

【问题讨论】:

  • -7 是目前(2016 年 4 月 29 日)的正确答案。问题是为什么 Moment .isDSTOffset() 例程不知道这一点。我认为这与 Moment 如何拥有 Date 值有关;如果它来自原生 Date 对象,它可能无法分辨。
  • 知道了!感谢您的澄清!这个moment("20160101").tz("America/Los_Angeles").utcOffset() 按预期工作。

标签: javascript timezone momentjs


【解决方案1】:

美国目前处于 DST(夏令时)。因此,我会使用UTC DST Offset 列,它显示-07:00

【讨论】:

  • 问题是为什么 Moment .isDSTOffset() 函数返回 false,而当前时区明显在 DST 中。
  • 啊...对不起。我误读了问题的真正含义。看起来这是一个错误。
【解决方案2】:

调用时刻创​​建函数,moment() 不带任何参数返回当前时刻。由于时区偏移量根据它们所附加的日期和时间而有所不同,因此您的结果将根据您调用此函数的时间而有所不同。

如果您想知道时间是否是夏令时,请使用isDSTisDSTShifted 函数用于处理无效的当地时间,而不是检查 DST。它可能可以更好地命名。

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 1970-01-01
    • 2013-11-27
    • 2018-02-12
    • 2014-02-04
    • 2011-11-08
    • 2018-03-01
    • 2017-10-18
    • 1970-01-01
    相关资源
    最近更新 更多