如何将时间从 utc 更改为 moment.js 中选择的时区?

How to get time changed from utc to the chosen timezone in moment.js?

假设我有一个约会:

"2000-01-01T01:00:00Z"

它是UTC时区。我想将时间移动到 Europe/Copenhagen 时区,这样它就是 "2000-01-01T02:00:00".

我想用moment-timezone来做。但是问题是它总是使用我的本地时区(不是 Europe/Copenhagen)。我尝试了多种方式,例如:

const date = '2000-01-01T01:00:00Z';
return moment(date).tz('Europe/Copenhagen').format('YYYY-MM-DDTHH:mm:ss');

但参考点仍然是我当地的时区。我根本不希望它使用我当地的时区。如何实现?

我尝试了两种选择。

The timezone is represented by the 'Z' at the end of the date

第一个像你这样的人:

moment('2000-01-01T01:00:00Z').tz('Europe/Copenhagen').format('YYYY-MM-DDTHH:mm:ss');

第二个比较棘手:

moment.tz('2000-01-01T01:00:00Z', 'UTC').tz('Europe/Copenhagen').format('YYYY-MM-DDTHH:mm:ss');

我得到:

2000-01-01T02:00:00

有了这两个选项。您使用的 moment 是什么版本?

来自您对问题的评论:

I'm in the Quatar timezone. The above code returns '2000-01-01T04:00:00' for me ...

这只会在以下情况之一发生:

  • 无论位置如何,您实际上是从 UTC 转换为卡塔尔时区:

    moment("2000-01-01T01:00:00Z").tz('Asia/Qatar').format('YYYY-MM-DDTHH:mm:ss')
    //=> "2000-01-01T04:00:00"
    
  • 您在卡塔尔,刚刚转换为当地时间:

    moment("2000-01-01T01:00:00Z").format('YYYY-MM-DDTHH:mm:ss')
    //=> "2000-01-01T04:00:00"
    
  • 您已经加载了moment和moment-timezone的脚本,但是您还没有加载任何时区数据。在这种情况下,您将在调试控制台中收到一条错误消息,指出 Moment Timezone has no data for <zone name> ...

    在这种情况下,时区转换不会发生,因此它的行为与上述条件中的代码相同。

    不要加载 moment.timzone.js,而是使用包含时区数据的文件之一,例如 moment-timezone-with-data-10-year-range.js。见 these docs.

我怀疑这是最后一个。