2011-09-20 38 views
8

我在控制檯輸入「date」,我得到了Tue Sep 20 01:01:49 PDT 2011 ......這是正確的。我的javascript(node.js)怎麼給我錯誤的時間戳?

但是,然後我在node.js中做了這件事,我得到了錯誤的時間。

var ts = String(Math.round(new Date().getTime()/1000)); 

輸出:1316505706,這是一小時後。

回答

-4

date在控制檯將返回服務器時間,而在網頁上使用JavaScript將返回客戶端的本地時間。

+4

我使用node.js,所以它是服務器的JavaScript – TIMEX

4

的原因是,getTime函數在UTC時區返回時間:

由getTime方法返回的值是自1970年1月1日00:00:00 UTC的毫秒數。您可以使用此方法幫助將日期和時間分配給另一個Date對象。

如果你想在你當前時區來獲取UNIX時間戳,您可以使用getTimezoneOffset方法:

var date = new Date(); 
var ts = String(Math.round(date.getTime()/1000) + date.getTimezoneOffset() * 60); 
8

@KARASZI約爲根源絕對正確的:Unix的時間戳總是UTC,除非你操縱他們。我建議如果你想要一個Unix時間戳,你應該把它留在UTC中,並且如果你需要向用戶顯示一個格式化的時間,那麼只能轉換爲本地時間。

這樣做的第一個好處是所有的服務器可以同時「說話」。例如,如果您已將服務器部署到亞馬遜EC2美國東部和亞馬遜EC2美國西部,並且它們共享一個公共數據庫,則可以在數據庫和服務器上使用UTC時間戳,而不必擔心每次都會有時區轉換。這是使用UTC時間戳的重要原因,但它可能不適用於您。

這樣做的第二個好處是,您可以根據經過的時間來衡量事物,而無需擔心夏令時(或時區,以防您正在移動的平臺上測量時間)。這個數字並不是很高,但如果你遇到某種情況,因爲在你測量的當地時間「倒退」了一個小時,你會感到非常困惑!

我能想到的第三個原因是非常小的,但一些性能極客會真正感激它:通過使用Date類的「now」函數,您可以在不分配新Date對象的情況下獲取原始UTC時間戳。

var ts = Date.now()/1000; 
1

注意可以通過使用的node.js包像timezonecomplete或時區-JS,其具有接口避免這種混淆是容易出錯的日期和時間的操作要少得多。