Как определить текущую дату у пользователя на PHP с учетом часовых поясов?
Имеется скрипт "день в истории", который сейчас показывает события из прошлого для совпадающих дат.
Есть задача сделать так, чтобы дата правильно отображалась не только по серверному времени, но и в любом часовом поясе (допустим, если пользователь зашел из Владивостока, он видит данные уже по наступившему для него дню).
Как это лучше реализовать? При этом не хочется, чтобы делались лишние запросы, если у людей на установлена неправильная дата.
Есть date_default_timezone_set, который устанавливает таймзону для всех функций, работающих со временем. Его можно вызывать после того как определили откуда зашел пользователь и какая таймзона ему нужна.
x = new Date();
// Вычислим значение смещения текущего часового пояса в часах
currentTimeZoneOffsetInHours = -x.getTimezoneOffset()/60;
document.write(currentTimeZoneOffsetInHours);
и передаём ajax-ом на сервер, там сверяем:
if (IP->город->пояс города===currentTimeZoneOffsetInHours) -> устанавливаем
else -> Просим пользователя выставить вручную.
У меня вот какая идея - сформировать данные в формате JSON за текущий день и за смежные с ним два дня. И это дело закэшировать на сутки. Дальше определяя день недели через Javascript выдавать пользователю нужный день. Если не совпадает с возможными - отдавать версию по серверному времени.
zooks: ну про json - это Вы про данные (тут как угодно можно), а по теме - отдавайте по левой строке равенства (IP->город->пояс города) - будет гораздо точнее.
PS: и про язык - не забудьте))
xmoonlight: из IP город получить несложно, как и широту, но сопоставить с часовым поясом довольно накладно. Не хранить же огромную таблицу со всевозможными городами и населенными пунктами. А если грубо определять по меридианам, то зачем тогда вообще навешивать функционал с определением IP.
xmoonlight: мне знать где он находится вовсе не обязательно, только его точную дату в календаре. Ты предложил сделать так: (IP->город->пояс города), если с IP и городом все ясно, то где предлагаешь брать часовой пояс?
zooks: ну ладно, других-то нет вариантов, т.к. смотреть по часам у пользователя - не самый лучший вариант.... (может быть у него часовой пояс настроен неверно, а время выставлено - верно.... как на Android-прошивках сейчас....)
Если используя только php, то можно воспользоваться продуктом Sypex Geo.
По ip определить часовой пояс и потом уже отталкиваясь от своего часового пояса, высчитать правильное время пользователя.
zooks: Но варианты через ajax тоже не подходят т.к. цитирую: "если у людей на установлена неправильная дата.", а вопрос звучал именно реализация через php.
Вот я и посоветовал )