时刻.js时区值返回错误的时间戳



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

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

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

我的方法有什么问题?

非常感谢。

编辑 1

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

moment.tz(moment(), "Pacific/Auckland").valueOf("x");给了我毫秒,但又是我的当地时间,而不是"太平洋/奥克兰"时间

因此,毫秒的计算以某种方式将其转换回本地时间,但为什么呢?在预期时区中获取毫秒的正确方法是什么?

我认为

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

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

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

这一刻的时间戳是什么?

1461604867

什么是世界协调时时间?

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

这一刻的时间戳是什么?

1461604867

什么,一样,为什么?

无论某个时刻位于哪个时区,都是相同的时间戳。当你调用moment()时,它指的是现在,在大时空连续体中的这个特定时刻。与 Date.now() 相同。实际上,你正在阅读这篇文章的那一刻仍然是你在哪里,我在哪里,在日本,在南极洲,在叙利亚,在格陵兰岛等地的完全相同的时刻。碰巧的是,这一刻在每个区域都由人类以不同的方式直观地表示(时间字符串)。

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

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

然后

time.format();

试试这个

.valueOf()的结果始终是毫秒,采用 UTC 格式。

您可以将毫秒转换回所需的时区,如下所示:

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

最新更新