针对当前时区调整的不同夏令时的 UTC 日期



我以 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"

如果我使用 moment 的时区来调整这个时间,它将不起作用,因为此刻的偏移量是 -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会将其解释为"未指定"的时区,并且不会从给定的日期时间中添加或减去任何时间。所以请注意:

> 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 作为时区指示符来格式化新日期,但不会修改日期时间。

相关内容

  • 没有找到相关文章