我想使用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")