簡體   English   中英

Moment.js 時區 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(); 給了我正確的時間字符串

moment.tz(moment(), "Pacific/Auckland").valueOf("x"); 給了我毫秒,但又是在我的當地時間,而不是在“太平洋/奧克蘭”時間

所以不知何故,毫秒的計算將其轉換回本地時間,但為什么呢? 在預期的時區獲得毫秒的正確方法是什么?

我認為可能只是概念上缺乏對時間戳實際含義的理解。

假設我現在所在的時間是:

2016年4月25日上午10:21(UTC-7)

現在的時間戳是什么?

1461604867

什么是UTC時間?

2016年4月25日下午5:21(UTC)

現在的時間戳是什么?

1461604867

什么,一樣,為什么?

時刻是相同的時間戳,無論它處於哪個時區。當您調用moment()時,它都指向正確的時間,即大時空連續體中的這個特定時刻。 與Date.now()相同。 實際上,您正在閱讀的那一刻,仍然是您所在的位置,我在日本,在南極洲,在敘利亞,在格陵蘭等地的同一時刻。恰好發生了這一時刻在視覺上得以體現(時間字符串)由人類在每個區域以不同的方式進行。

Moment時區不會影響它存儲的實際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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM