【问题标题】:momentjs - why is moment([2020, 0, 29, 0, 0, 0]).utcOffset(0); showing as '2020-01-28T23:00.00+00:00'?momentjs - 为什么是 moment([2020, 0, 29, 0, 0, 0]).utcOffset(0);显示为“2020-01-28T23:00.00+00:00”?
【发布时间】:2021-01-04 08:57:41
【问题描述】:

我正在尝试创建一个需要表示这个时间的时间对象:29 January 2020 00:00:00

我需要在我的项目中没有时区的情况下工作,所以我像这样创建了我的时刻对象:

let m = moment([2020, 0, 29, 0, 0, 0]).utcOffset(0);

当我将创建的日期记录到控制台时,会发生以下情况:

console.log(m.format('YYYY-MM-DDTHH:mm:ssZ');
>>> 2020-01-28T23:00.00+00:00

“00:00:00”时间有问题吗?为什么我有23:00:00 而不是desired dvalue?

【问题讨论】:

  • "使用数组构造会在当前时区创建一个日期。要从 UTC 的数组创建日期,请使用 moment.utc(Number[])。 "来自the documentation
  • 错过了!我觉得自己好傻……

标签: javascript date time timezone momentjs


【解决方案1】:

根据the Moment.js documentation

解析

[...]

数组

[...] 用数组构造会在当前时区创建一个日期。要从 UTC 的数组创建日期,请使用 moment.utc(Number[])。

因此[2020, 0, 29, 0, 0, 0] 被解释为您的本地时区。调用 utcOffset(0) 然后该号码向后移动一小时,因此您当前处于 +01:00 时区。

按照文档的建议,使用 moment.utc(Number[]) method 直接在 UTC 时区创建日期:

let m = moment.utc([2020, 0, 29, 0, 0, 0]);

console.log(m.format('YYYY-MM-DDTHH:mm:ssZ'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.28.0/moment.min.js"></script>

【讨论】:

    猜你喜欢
    • 2015-04-12
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2011-05-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多