使用moment获取时区差异(以小时为单位)

13

我想使用Node.js moment模块获取纽约和香港之间的时区差异。 我已经完成了一些初步工作。

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

我可以编写一个函数来计算两个时区之间的差异(以小时为单位)。但我希望有更简单的方法。

使用moment库是否有更优雅且更简单的方法?

1个回答

25

虽然不确定“更简单”,但更正确的说法是(因为并非所有时区彼此相隔整小时):

// 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>


我不太明白为什么需要 var now = moment.utc();?为什么不直接获取 HongKong_time_hrNewYork_time_hr 偏移量呢? - guagay_wk
4
上面的评论是一个提示 - 时区偏移会随着一年中的不同时间而改变,并非同时发生。香港(没有夏令时)和纽约(有夏令时)之间的差异取决于你是在夏季还是冬季询问。而且你不能只使用 hr,因为比如加尔各答的偏移值是 +05:30。 - Amadan
1
很好的答案。如果你只传递 moment() 而不是 moment.utc(),它也可以工作。无论你传递哪种形式,它仍然会被评估为相同的基于UTC的时间戳。关于结果取决于何时调用它的+1。"纽约和洛杉矶之间有多少小时?"(通常为3个小时,但有时为2个小时,有时为4个小时。) - Matt Johnson-Pint
5
另一种获得偏移量的方法是moment(now).tz("America/New_York").utcOffset(),但两种方式都可以。你仍然需要手动减去它们。 - Matt Johnson-Pint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接