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

问题描述 投票:0回答:1

鉴于当前的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不提供此功能。

实现这一目标的最佳方法是什么?

javascript datetime timezone momentjs timezone-offset
1个回答
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

最好的方法是计算两个潜在的偏移,然后看看其中一个是否超出范围以排除它。或者,如果一个人不关心处理整个世界的数据,那么可以缩小范围以使其不重叠。

© www.soinside.com 2019 - 2024. All rights reserved.