Вы сказали:
Используя javascript, я знаю, что часовой пояс моих пользователей - UTC + 3.
Возможно, вы запустили что-то вроде этого:
var offset = new Date().getTimezoneOffset();
Возвращает текущее смещение *1011* от UTC в минутах, при этом положительные значения падают к западу от UTC. не возвращает часовой пояс!
Часовой пояс не является смещением.Часовой пояс имеет смещение.Может иметь несколько различных смещений .Часто есть два смещения, одно для стандартного времени и одно для летнего времени.Одно числовое значение не может представлять это одно.
- Пример часового пояса:
"America/New_York"
- Соответствующее стандартное смещение:
UTC-5
- Соответствующее смещение дневного света:
UTC-4
Помимо двух смещений, в этом часовом поясе также указаны даты и время перехода между двумя смещениями, чтобы вы знали, когда они применяются.Также есть исторический отчет о том, как смещения и переходы могли меняться со временем.
См. Также «Часовой пояс! = Смещение» в теге часового пояса вики .
В нашем примере вы, вероятно, получили значение -180
из javascript, представляющее текущее смещение UTC + 3.Но это только смещение для этого конкретного момента времени!Если вы будете следовать ответу minaz , вы получите часовой пояс, который предполагает, что UTC + 3 - всегда - правильное смещение.Это сработало бы, если бы реальный часовой пояс был чем-то вроде "Africa/Nairobi"
, который никогда не использовал ничего, кроме UTC + 3.Но все, что вы знаете, ваш пользователь может быть в "Europe/Istanbul"
, который использует UTC + 3 летом и UTC + 2 зимой.