Moment.js timezone valueOf 返回错误的时间戳

Moment.js timezone valueOf returning wrong timestamp

我想使用 moment.js 将输入时刻转移到不同的时区并获取其时间戳。

moment.tz(moment(), "Pacific/Auckland").valueOf();

问题是,当我执行此操作时,moment.tz() 对象看起来不错,但 valueOf() 方法以某种方式将其计算回我计算机上设置的时区。

我的方法有什么问题?

非常感谢。

编辑 1

moment.tz(moment(), "Pacific/Auckland").format(); 给了我正确的时间 string

moment.tz(moment(), "Pacific/Auckland").valueOf("x"); 给了我毫秒数,但又是在我当地时间,而不是 "Pacific/Auckland" 时间

所以不知何故,毫秒的计算将其转换回本地时间,但为什么呢?在预期时区中获取毫秒数的正确方法是什么?

var time  = moment.tz("2016-04-25 12:00", "Pacific/Auckland");

然后

time.format();

试试这个

我认为可能只是在概念上缺乏对时间戳实际含义的理解。

假设我所在的当前时间是:

04/25/2016 @10:21am (UTC-7)

此时的时间戳是多少?

1461604867

UTC 时间是多少?

04/25/2016 @5:21pm (UTC)

此时的时间戳是多少?

1461604867

什么,一样,为什么?

一个时刻是相同的时间戳,不管它在哪个时区。 当你调用 moment() 时,它指的是现在,这个特定的时刻宏大 space 时间连续体中的时间。与 Date.now() 相同。实际上,你正在阅读这篇文章的那一刻,仍然是你所在的那一刻,我所在的那一刻,在日本,在南极洲,在叙利亚,在格陵兰等地。碰巧的是,这一时刻被视觉化了(时间字符串)由人类在每个区域以不同的方式。

时刻时区不影响它存储的实际日期对象。它只影响日期的 视觉表示。 视觉表示因时区而异。这就是为什么您不会得到不同的时间戳。

.valueOf() 的结果在 UTC 中始终为毫秒。

您可以像这样将毫秒转换回您想要的时区:

  const moment= Moment(milliseconds)
  moment.tz(TIME_ZONE).format("LT")