Почему при получении gmt возвращается неправильное значение?
Всем привет! И из-за того, что у пользователей разные временные зоны, а на сервере по МСК, то для некоторых задач приходится время пользователя переводить в МСК с помощью GMT: -new Date().getTimezoneOffset()/60
Но вот проблема. У некоторых пользователей значение приходит с "0". Казалось бы, есть такие временные зоны, но вот несостыковка. Если сравнить их текущее время и время по МСК, то разница +5. Т.е. когда в МСК 07:00, то у них 12:00.
В связи с этим вопрос. Из-за чего getTimezoneOffset может работать некорректно? И вообще, как проверить действительно ли проблема в GMT, а не в Date.now(), с помощью которого получаю текущее время пользователя? Math.round(Date.now() * 0.001)
Может ли браузер или какое-нибудь стороннее ПО блокировать получение подобных данных?
Браузер того конкретного пользователя "Мобильный яндекс браузер" (согласно я.метрике).
Более правильно, при работе с разными временными зонами, при передаче на сервер передавать время в gmt-строке. И с сервера передавать время в том же формате. Обычно, помогает решить проблему со смещением.
С другой стороны - установка временной зоны - это произвол пользователя, как настроит так и будет. Имеет право настроить неправильно, ну а вам решать - клиент важный или можно его послать перенастраивать время...
Для проверки можно всегда передавать метку текущего времени в форме с клиента (в gmt), в устанавливаемым при передаче JS скрытом поле. Если разница текущего времени с сервером не более 5 минут - можно верить времени, если больше - пытаться что-то делать, например вычислять смещение времени как разницу между "текущими" и откорректировать время.
ksnk, вопрос не в том, почему пользователь может менять часовой пояс, а в том, что GMT не совпадает с временем клиента при сравнении с временем по МСК. Т.е. как раз то, что вы и описали.
Как уже писал в вопросе, при сравнении времени GMT +5, а при получении самого GMT с помощью js GMT = 0