Вроде и задача несложная, но чегой-то голова ее соображать отказывается... :)
Задача — отслеживание пользователей из разных таймзон на карте. При клике на маячки должно показываться их локальное время, а не мое.
Пользователь приезжает в контрольную точку скажем в Хабаровске в семь утра, жмет кнопку "здесь был вася". На сервер улетают его координаты и его локальное время (Date.now() из js).
На сервере mysql, формат хранения datetime. Сейчас сделано INSERT INTO tbl (date_upd) VALUES (FROM_UNIXTIME(:date_upd/1000) ). Можно вносить любые изменения, заказчик ругаться не будет :)
Наблюдатель из Москвы видит маячок на карте Хабаровска, кликает на него и получает — вася был здесь в 12 ночи по Москве.
Вроде бы все логично, но наблюдателю нужно знать, во сколько вася был на месте по хабаровскому времени. Наблюдатель ленив и не хочет постоянно пересчитывать время, тем более что "васей" десятка два, и все они в разных таймзонах.
Как бы показать ему правильное время? Пните в нужную сторону, Великие Гуру!
Во-первых, нельзя доверять времени клиента, никто не мешает мне подтасовать факты просто переведя часы на своем девайсе
Во-вторых, передавать время в виде int timestamp не лучшая идея, используйте UTC строку
В-третих, Вам поможет moment.js
Кстати собственно moment.js и выводит время для наблюдателя. Но я не нашел в его доке способа показывать "оригинальное" время, он упорно перегоняет все в таймзону наблюдателя.
Вот пользователь из Asia/Yekaterinburg оставил в базе свою метку 1456415507234 и она при любых комбинациях показывается как Europe/Moscow. Что нужно сделать в moment.js чтобы он перестал умничать?
Строку дороже хранить и сложнее форматировать. Какие у нее преимущества?
Глюкъ Виртуален: momentjs.com/docs/#/manipulating/utc-offset
а на счет строки, timestamp в *nix системах начинается с 1 янв 1970 00:00:00 +00:00 а в windows с 1 янв 1980 00:00:00 +00:00 - Разница в 10 лет - это раз, два при отладке такое время можно посмотреть просто в данных