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

时间:2016-04-25 16:19:26

标签: javascript timestamp momentjs milliseconds

我想使用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"); 给了我几毫秒,但是在我当地的时间再次,而不是在“太平洋/奥克兰”时间

所以毫秒计算毫秒将其转换回当地时间,但为什么呢?还有什么正确的方法来获得预期时区的毫秒数?

2 个答案:

答案 0 :(得分:3)

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

假设我现在的时间是:

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

这一刻的时间戳是什么?

1461604867

什么是UTC时间?

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

这一刻的时间戳是什么?

<强> 1461604867

什么,同样,为什么?

时刻是相同的时间戳,无论它在哪个时区。当你调用moment()时,它指的是现在,这个特殊的时刻在大空间时间连续体。与Date.now()相同。实际上,你读到这一刻的那一刻,仍然是你,我在哪里,在日本,在南极洲,在叙利亚,在格陵兰岛等地的完全相同的时刻。恰巧这一刻在视觉上得到了表现(时间字符串)人类在每个区域以不同的方式。

时刻时区不会影响它存储的实际Date对象。它只影响日期的视觉表示。视觉表示随时区变化。这就是为什么你不会得到不同的时间戳。

答案 1 :(得分:0)

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

然后

time.format();

试试这个