使用我创建的时区偏移量初始化 Moment

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

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

我希望:

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

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

反正我可以

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

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

我怎样才能得到我预期的行为,js 中的一个时刻,它位于我传入的字符串中包含的时区偏移量中?

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

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

关于你问题的"why?"部分:

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

请记住,时刻必须应对各种各样的输入。

另外请记住,时区和时区偏移量是两个不同的东西。 -08:00 的偏移量并不一定意味着您处于美国太平洋时区。