2016-05-13 163 views
0

我必須計算設定時間和當前服務器時間之間的時間差。兩個時區格式化日期之間的moment.js差異

我正在使用momentjs和時區時區庫。

這是我有:

var serverTime = moment.tz(new Date(), "Europe/Berlin").format(); 
var bar = moment.tz("2016-05-14 00:00:00", "Europe/Berlin").format(); 
var baz = bar.diff(serverTime); 

console.log('server time is: ' + serverTime); 
console.log('time diff is: ' + baz); 

這給了我一個錯誤:

TypeError: bar.diff is not a function 

是它可能造成兩種格式的時區之間的日期差異比較?如果不是,使用momentjs庫進行這種計算的最佳方法是什麼?

回答

0

format產生一個字符串,所以直到你需要不使用它一個字符串。

var now = moment.tz("Europe/Berlin"); 
var bar = moment.tz("2016-05-14 00:00:00", "Europe/Berlin"); 
var baz = bar.diff(now); 

console.log('current time is: ' + now.format()); 
console.log('time diff is: ' + baz); 

請注意,除非您在服務器上運行此代碼,否則它不是「服務器時間」。只要它在客戶端上運行,它仍然基於客戶端的時鐘 - 即使您使用不同的時區。

+0

謝謝。我想我應該更好地命名變量。我在兩個日期之間使用diff方法轉換爲我指定的時區,以獲得所需的結果。不過,如果使用utc是模擬服務器時間的好主意。 – Grant

+0

如果你只是比較*時間,你甚至不需要指定任何特定的時區,因爲它在引擎蓋下使用UTC。我只在第一行中包含TZ,因爲稍後會顯示它。如果你只關心diff,你可以使用'moment()'。 –

+0

WRT「服務器時間」,真正做到這一點的唯一方法是通過從服務器獲取時間戳 - 當然,您必須考慮傳輸該時間戳有延遲。你似乎在混淆「使用服務器的時區」和「使用服務器的時鐘」。請記住,客戶可以將自己的時鐘更改爲任何他們想要的。不能保證它會同步。 –

0

moment.js真的很棒!

看來我可以簡單地做:

moment.duration(day14.diff(serverTime)).asHours(); 

或獲得的分鐘數字和時間分別

moment.duration(day14.diff(serverTime)).minutes(); 
moment.duration(day14.diff(serverTime)).hours();