以小时为单位获得时区差异

use*_*486 10 javascript timezone node.js timezone-offset momentjs

我想通过Node.js时刻模块获得纽约和香港之间的时区差异.我做了一些初步的工作.

var NewYork_time_hr = moment().tz("America/New_York").format('HH'); 
var HongKong_time_hr = moment().tz("Asia/Hong_Kong").format('HH');
Run Code Online (Sandbox Code Playgroud)

然后我可以继续编写一个函数来计算2个时区之间的差异,以小时为单位.我希望有一个更简单的方法.

使用时刻库​​有更优雅,更简单的方法吗?

Ama*_*dan 17

不确定"更简单",但更正确(因为并非所有时区彼此相隔一小时):

// 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);
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

  • 上面的评论是一个提示 - 时区抵消了全年的变化,[并非所有在同一时间](https://en.wikipedia.org/wiki/Daylight_saving_time_by_country).香港(没有DST)和纽约(有DST)之间的差异取决于你是在夏天还是在冬天提出要求.你不能只使用`hr`因为,例如加尔各答在+05:30偏移. (4认同)
  • 仅供参考,获得抵消的另一种方式是"时刻(现在).tz("America/New_York").utcOffset()`,但两种方式都可以.您仍然需要手动减去它们. (3认同)