Смещение часового пояса равняется разнице между универсальным (UTC) и местным временем в минутах. Заметьте, что смещение будет положительным, если местное время отстаёт от UTC, и отрицательным, если оно опережает UTC. Например, если ваш часовой пояс - UTC+10 (Владивостокское зимнее время), то метод вернёт -600.
Это значение не является постоянным для часового пояса, т.к. меняется при наступлении летнего времени.
Пример: Получение часового пояса
x = new Date()
// Вычислим значение смещения текущего часового пояса в часах
currentTimeZoneOffsetInHours = -x.getTimezoneOffset()/60
Плохо, что возвращается разницы с противоположным знаком. Скажем, если GMT +3, то функция getTimezoneOffset() покажет - 180, а не +180. Еще нужно дописывать действия, чтобы вернуть с нужным знаком.
не нужно. С минусом - это и будет разница, если нужен модуль, то Math.abs
Как раз таки НУЖНО! Хоть подумал прежде, чем ответить? Допустим сервер для всех пользователей планеты выводит на страницу время публикации статьи в виде универсального (UTC) времени, скажем 14:00. Нужно с помощью JS переделать его на местное время пользователя. Местное время UTC+3 (Москва) означает, что у пользователя время на 3 часа БОЛЬШЕ, чем всемирное универсальное время. Когда на сервере 14:00, местное - 17:00.
Берем функцию new Date().getTimezoneOffset() / 60. Оно выведет -3, вместо логичного +3. То есть, чтобы из серверного времени получить местное, мы должны взять эту функция с ОБРАТНЫМ знаком.
Так в чем проблема то? На стороне сервера время публикации сохранено в UTC, получаешь разницу клиента и прибавляешь ко времени публикации, если положительная разница то будет +3, если отрицательная то -3 часа получиться и все.
Может ваш код не логичен? В таком варианте все норм:
Действительно. Зачем прибавлять часовое смещение, если его нужно отнимать.
Я как-то и сам попался в эту логическую ловушку.
Получение часового пояса
Это не получение часового пояса, а получение сдвига.
Один часовой пояс может несколько сдвигов содержать летом и зимой.