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

Given current UTC time and specific hour of the day, return timezone offset (Javascript)

给定当前 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 AM 时的时区偏移量,则 2019-02-23T17:00:00.000Z UTC 时间的预期结果为:

{
    start: 480,
    end: 540
}

我也试过寻找一个可以执行此操作的库,但我没有找到任何运气。据我所知 moment.js 不提供此功能。

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

不可能以 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,此函数应该 return -11 还是 +13

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