给定当前UTC时间和一天中的特定时间,返回时区偏移量(Javascript)

时间:2019-02-23 20:32:19

标签: javascript datetime timezone momentjs timezone-offset

鉴于当前UTC时间和一天中的特定时间,我想找到以分钟为单位的时区偏移量。以下功能在小时为午夜的所有时区都有效(我认为)(不包括从30和45分钟开始的几个时区,但如果每小时运行一次,则仍在时区范围内)。

function getCurrentGlobalTimeOffset(currentGlobalTime) {
  var currentGlobalHour = dateFormat(currentGlobalTime, 'H');

  if (currentGlobalHour <= 11) {
    var currentGlobalOffsetStart = currentGlobalHour * 60;
    var currentGlobalOffsetEnd = (currentGlobalHour * 60) + 60;
  } else {
    var currentGlobalOffsetStart = (24 - currentGlobalHour) * -60;
    var currentGlobalOffsetEnd = ((24 - currentGlobalHour) * -60) + 60;
  }

  return {
    start: currentGlobalOffsetStart,
    end: currentGlobalOffsetEnd
  }
}

我正在努力弄清楚如何结合特定的时间。例如,如果我想获取太平洋时间上午9:00的时区偏移量,则在2019-02-23T17:00:00.000Z UTC时间的预期结果将是:

{
    start: 480,
    end: 540
}

我也试图找到一个可以做到这一点的图书馆,但是我没有任何运气。据我所知moment.js没有提供此功能。

完成此任务的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

不可能以100%的信心完成结果,这就是为什么您无法在Moment.js或其他库中找到用于此目的的函数的原因。原因是当前世界的时区偏移量在UTC-12到UTC + 14的范围内,因此在这种功能会产生歧义的地方存在重叠。

2019-02-23T20:00:00Z(UTC)为例。这就是2019-02-23T09:00:00-11:00(在美属萨摩亚)和2019-02-24T09:00:00+13:00(在新西兰)(reference here)。因此,如果当前UTC小时为20,给定的本地小时为9,此函数应返回-11还是+13

最好的方法是计算两个可能的偏移量,然后查看其中一个是否超出范围以排除它。或者,如果不关心使用整个世界的数据,则可以缩小范围,使其不会重叠。