2015-12-28 461 views
1

我使用moment.js轉換一堆的時間戳在它的特定的時區,以Unix時間戳是這樣的:moment.js不轉換與特定的時區,以UNIX時間戳時間戳

var timestamp = "2015-12-29T09:35:00.000-08:00"; 
console.log(moment("2015-12-29T09:35:00.000-08:00").unix(); 
console.log(moment("2015-12-29T09:35:00.000-08:00").tz("America/Los_Angeles").unix(); 

控制檯日誌上述聲明都是由於某種原因,相同 - 1451361900.它正在記錄的這個unix時間戳記在我當地的時區,而不是我要求的那個:「America/Los_Angeles」。我錯過了什麼?

+0

UNIX或POSIX格式沒有時區的概念 – Bek

回答

0

正確的方法是使用時刻 - 時區是這樣的。

console.log(moment("2015-12-29T09:35:00").unix()); 
console.log(moment.tz("2015-12-29T09:35" , "America/Los_Angeles").unix()); 

在上面你所提供的時區作爲一個字符串太這是最後一部分」 .000-08:00" ,然後你提供另一個區域,這是不正確。

2

unix時間戳或Posix應始終採用UTC(協調世界時)格式。

一刻只是做這樣

function unix() { 
    return Math.floor(+this/1000); 
} 

凡日期對象轉換爲整數,然後從毫秒轉換爲秒的東西。

的出發點是常規的JavaScript Date對象,而ECMA標準說

Date對象是基於是自1970年1月1日,UTC的 毫秒數的時間值。

所以當從1月1 1970(時代)轉換爲毫秒數,即您不能設置另一個時區上的Unix時間戳日期對象總是UTC,無論您的日期相同。

0

正如您試圖找出日期「2015-12-29T09:35:00.000-08:00」的unix時間戳。在此日期格式中,時區值已存在,即「-08:00」,因此您將獲得相同的unix時間戳。

爲了得到Unix時間戳所需溶液,取出的時區值,並使用矩時區爲:

的console.log(moment.tz(「2013年12月1日」,「美國/洛杉磯」 ).unix());

有關詳情,請moment-timezone