【问题标题】:Initialize a Moment with the timezone offset that I created it with用我创建的时区偏移量初始化一个时刻
【发布时间】:2016-03-20 19:31:06
【问题描述】:

我在 javascript 中使用 moment 和 moment-timezone,这部分是我见过的最不直观的 API 之一。

我希望:

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

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

不管怎样,我可以的

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

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

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

【问题讨论】:

    标签: javascript momentjs


    【解决方案1】:

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

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

    至于“为什么?”您问题的一部分:

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

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

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

    【讨论】:

    • 是的,可能有一些我没有考虑到的东西或历史包袱之类的。让基本形式 moment() 成为本地模式似乎是一个奇怪的选择, parseZone() 行为对于默认行为似乎更自然。谢谢解释
    • 仅供参考,这个话题实际上是我第一次接触 moment.js 的方式。有关历史记录,请参阅 #611#887
    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 2016-08-24
    • 2020-08-18
    • 1970-01-01
    • 2016-04-22
    • 2021-09-20
    • 2020-08-05
    • 2011-01-17
    相关资源
    最近更新 更多