Moment return 传递给它的相同值而不是 utc 值

Moment return the same value passed to it instead of utc value

我正在尝试将日期转换为 utc,但时刻 return 与我使用的值相同。

例如

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

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

我必须先设置值的时区吗?为什么 moment return 值错误?那个日期应该 return +3 小时。

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

在相关新闻中,研究使用 date-fns 库而不是 moment。时光渐老...

Moment github

Moment.js is a legacy project, now in maintenance mode. In most cases, you should choose a different library.

这 returns 是同一天,因为您从未指定任何时区

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");

您需要定义 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

We now generally consider Moment to be a legacy project in maintenance mode. It is not dead, but it is indeed done.

In practice, this means:

  • We will not be adding new features or capabilities.
  • We will not be changing Moment's API to be immutable.
  • We will not be addressing tree shaking or bundle size issues.
  • We will not be making any major changes (no version 3).
  • We may choose to not fix bugs or behavioral quirks, especially if they are long-standing known issues.