【问题标题】:Moment return the same value passed to it instead of utc value时刻返回传递给它的相同值而不是 utc 值
【发布时间】:2022-01-07 14:18:32
【问题描述】:

我试图将日期转换为 utc,但时刻返回我使用的相同值。

例如

moment(date, 'YYYY-MM-DD HH:mm:ss').utc().format('YYYY-MM-DD HH:mm:ss')

如果我使用date = '2022-01-07 11:30:00' 时刻返回2022-01-07 11:30:00

我必须先设置值的时区吗?为什么时刻返回错误的值?它应该在该日期返回 +3 小时。

【问题讨论】:

  • 为什么要返回+3小时?您从未指明时区

标签: momentjs


【解决方案1】:

您需要定义date 所在的时区,然后偏移量将符合预期:

例如,使用Europe/Amsterdam 作为时区

const date = '2022-01-07 11:30:00';

const utc = moment(date, 'YYYY-MM-DD HH:mm:ss')
              .tz('Europe/Amsterdam')
              .utc()
              .format('YYYY-MM-DD HH:mm:ss');
console.log(utc);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.32/moment-timezone-with-data.min.js"></script>

这将输出 2022-01-07 10:30:00,因为与 UTC 相比,阿姆斯特丹时间是 -1


小边节点,引用MomentJS Project Status page

我们现在通常认为 Moment 是一个处于维护模式的遗留项目。它没有死,但它确实完成了。

实际上,这意味着:

  • 我们不会添加新特性或功能。
  • 我们不会将 Moment 的 API 更改为不可变的。
  • 我们不会解决树抖动或包大小问题。
  • 我们不会进行任何重大更改(无版本 3)。
  • 我们可能会选择不修复错误或行为怪癖,特别是如果它们是长期存在的已知问题。

【讨论】:

    【解决方案2】:

    您传入的数据没有任何指示它所在的时区,所以现在(我相信)假设它已经是 UTC。

    在相关新闻中,考虑使用 date-fns 库而不是 moment。时刻变老了……

    Moment github

    Moment.js 是一个遗留项目,现在处于维护模式。大多数情况下, 你应该选择一个不同的库。

    【讨论】:

      【解决方案3】:

      这将返回相同的日期,因为您从未指定任何时区

      var time = moment("2013-08-26 16:55:00") //this creates time in my tz
      

      您可以这样设置时区:

      var time = moment("2013-08-26 16:55:00").tz("America/Los_Angeles");
      

      【讨论】:

      • 另外 - 考虑更改为像 day.js.org 这样的库,它具有相同的 API,但未被弃用。
      猜你喜欢
      • 1970-01-01
      • 2021-03-09
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2019-04-18
      • 2018-04-09
      • 2021-12-10
      相关资源
      最近更新 更多