我在javascript中使用时刻和时刻 - 这个部分是我见过的最不直观的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中的时刻?
使用parseZone
保持,因为它是在通过了偏移.
moment.parseZone("2015-12-14T04:00:00Z")
至于"为什么?" 你问题的一部分:
moment(...)
是本地模式.模糊输入(无偏移)假定为本地时间.明确的输入(带偏移)调整为当地时间.
moment.utc(...)
是utc模式.模糊输入假定为UTC.明确的输入调整为UTC.
moment.parseZone()
保持输入区域的传入.如果输入不明确,则与本地模式相同.
moment.tz(...)
使用moment-timezone插件可以解析特定时区的输入.
请记住,时刻必须与各种各样的投入相抗衡.
还要记住,时区和时区偏移是两个不同的事情.抵消-08:00
并不一定意味着您处于美国太平洋时区.