关于javascript:使用我创建的时区偏移量初始化一个时刻

Initialize a Moment with the timezone offset that I created it with

我在javascript中使用时刻和时刻 - 这个部分是我见过的最不直观的API之一。

我希望如此:

1
moment("2015-12-14T04:00:00Z").utcOffset()

将是一个纯函数并返回包含在参数中的偏移量,即0.但是它隐式地将其转换为我的本地时区偏移量(PST),所以这返回-480为什么? 我问我刚刚创建的对象偏移了什么,而不是我目前所处的偏移量。就像我写了一个api,其中调用User.find(123).name()返回你的名字而不是用户的名字123。

无论如何,我能做到

1
moment("2015-12-14T04:00:00Z").tz("utc").utcOffset()

但我的日期时间字符串是动态的,所以我不知道时区。

我怎样才能得到我所期望的行为,在传入的字符串中包含的时区偏移量中的js中的时刻?


使用parseZone保留传入的偏移量。

1
moment.parseZone("2015-12-14T04:00:00Z")

至于"为什么?" 你问题的一部分:

  • moment(...)是本地模式。 模糊输入(无偏移)假定为本地时间。 明确的输入(带偏移)调整为当地时间。
  • moment.utc(...)是utc模式。 模糊输入假定为UTC。 明确的输入调整为UTC。
  • moment.parseZone()保持输入区域的传入。如果输入不明确,则与本地模式相同。
  • 带有moment-timezone插件的moment.tz(...)可以解析特定时区的输入。

请记住,时刻必须与各种各样的投入相抗衡。

还要记住,时区和时区偏移是两个不同的事情。 偏移-08:00并不一定意味着您处于美国太平洋时区。