根据当前时区调整的不同夏令时的 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
会将其解释为 "unspecified" 时区,并且不会从给定的日期时间中添加或减去任何时间。所以注意:
> 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
作为时区指示符,但不会修改日期时间。
我将日期以 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
会将其解释为 "unspecified" 时区,并且不会从给定的日期时间中添加或减去任何时间。所以注意:
> 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
作为时区指示符,但不会修改日期时间。