Учитывая текущее время UTC и определенный час дня, возвращаем смещение часового пояса (Javascript) - PullRequest
0 голосов
/ 23 февраля 2019

Учитывая текущее время 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 голосов
/ 24 февраля 2019

Невозможно выполнить то, что вы просите, со 100% уверенностью в результатах, поэтому вы не найдете функции для этого в Moment.js или других библиотеках.Причина в том, что смещения часовых поясов в мире в настоящее время находятся в диапазоне от UTC-12 до UTC + 14, поэтому существует совпадение, при котором такая функция будет иметь неоднозначные результаты.

Рассмотрим в качестве примера 2019-02-23T20:00:00Z (УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ).Это и 2019-02-23T09:00:00-11:00 (в Американском Самоа) и 2019-02-24T09:00:00+13:00 (в Новой Зеландии) ( ссылка здесь ).Поэтому, если текущий UTC-час равен 20, а заданный локальный час - 9, должна ли эта функция вернуть -11 или +13?

Лучшее, что можно сделать, - это рассчитать оба возможных смещения, а затем посмотрите, находится ли один из них вне диапазона, чтобы исключить его.Или можно сузить диапазон, чтобы он не перекрывался, если бы не заботился о работе с данными для всего мира.

...