关于momentjs:根据当前时区调整的不同夏令时的UTC日期

UTC date from different daylight savings adjusted for current timezone

本问题已经有最佳答案,请猛点这里访问。

我有以UTC格式保存在mongodb中的日期,例如"2016-01-28T00:00:00.000Z"。 在客户端我使用moment.js格式化日期。 但是,当我创建这个特定日期的时刻时,夏令时发挥作用:

>moment("2016-01-28T00:00:00.000Z").format()

"2016-01-27T19:00:00-05:00"

如果我使用时刻的时区来调整这个时间,它就不会起作用,因为此刻的偏移量是-4,而不是-5。 调整这个时间的正确方法是什么,这样,而不是1/27/16,我得到1/28/16,这就是我想要的。 目前,一个解决方案我想知道什么在几分钟内得到.utcOffset并将其添加到我的时间:

moment("2016-01-28T00:00:00.000Z").add(
-moment("2016-01-28T00:00:00.000Z").utcOffset(),'minutes').format()

"2016-01-28T00:00:00-05:00"

但是,我不确定这是否是最好的方法。


查看ISO 8601的规范,特别是围绕时区指示符。

格式化输入字符串末尾的"Z"指定数字为UTC时区。 moment库采用UTC日期并自动将其转换为本地时区,在您的情况下,这意味着减去几个小时。

如果取消"Z",则moment会将其解释为"未指定"时区,并且不会在给定日期时间内添加或减去任何时间。 所以请注意:

1
2
3
4
> moment("2016-01-28T00:00:00.000Z").format()
<"2016-01-27T19:00:00-05:00"
> moment("2016-01-28T00:00:00.000").format()
<"2016-01-28T00:00:00-05:00"

删除"Z"后,moment仍将使用-05:00格式化新日期作为时区指示符,但不会修改日期时间。