2015-11-13 69 views
8

以小時時區的差異我想獲得與Node.js的時刻模塊紐約和香港之間的時區差異。我已經做了一些前期工作。獲取與時刻

var NewYork_time_hr = moment().tz("America/New_York").format('HH'); 
var HongKong_time_hr = moment().tz("Asia/Hong_Kong").format('HH'); 

然後我可以繼續寫一個函數來計算兩個時區之間的差異,以小時爲單位。我希望有一個更簡單的方法。

是否有一個更優雅,更簡單的方式與時刻庫做呢?

回答

10

不知道關於「簡單」,但更正確的(因爲不是所有時區彼此整整一個小時):

// get the current time so we know which offset to take (DST is such bullkitten) 
 
var now = moment.utc(); 
 
// get the zone offsets for this time, in minutes 
 
var NewYork_tz_offset = moment.tz.zone("America/New_York").offset(now); 
 
var HongKong_tz_offset = moment.tz.zone("Asia/Hong_Kong").offset(now); 
 
// calculate the difference in hours 
 
console.log((NewYork_tz_offset - HongKong_tz_offset)/60);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.4.1/moment-timezone-with-data-2010-2020.min.js"></script>

+0

Upvoted和選擇答案。 我不明白爲什麼需要'var now = moment.utc();'?爲什麼不只是''HongKong_time_hr'的'NewYork_time_hr'偏移? – user781486

+4

它上面的評論是一個暗示 - 時區偏移改變整個一年,[不是所有在同一時間(https://en.wikipedia.org/wiki/Daylight_saving_time_by_country)。香港(沒有DST)和紐約(DST)之間的區別取決於你在夏季還是在冬季要求。你不能只使用'hr',因爲,例如加爾各答抵消+05:30。 – Amadan

+1

很棒的回答。如果你只是通過'moment()'而不是'moment.utc()',它也會起作用。無論您傳遞哪種表單,它仍會被評估爲基於UTC的時間戳。取決於你什麼時候調用它,結果會有所不同。 「紐約和洛杉磯之間有多少小時?」 (通常3,但有時2和有時4) –