2015-11-13 24 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) –