Часовые пояса посетителей

Metal Messiah
На сайте с 01.08.2010
Offline
152
868

Добрый вечер. Назрела проблема - надо что-то делать с отображением времени на сайте.

В идеале время должно отображаться с учетом часового пояса посетителя, чтобы не было "назад в будущее".

Как правило, время выводится через smarty {$var|date_format=}, еще используется date()

Если бы было только date() - можно было бы плюсануть константу, но это не универсально.

Плюс к этому, сайт расположен на одном сервере, БД временно на другом, сайт скоро тоже переедет, часовые пояса разные, с учетом репликации намечается dpkg-reconfigure tzdata на GMT на обоих серверах (это правильная мысль?) чтобы можно было работать с разных Apache+php с одной БД (сейчас внесение данных скриптом с другого сервера приведет к сдвигу в базе).

Вывод московского или еще какого-то времени всем посетителям не вариант, гемор с javascript функцией, выводящей время, посчитанное как определенное смещение от текущего не предлагать. Сайт мультиязычный, аудитория из разных стран. Определять по стране хорошо, но GeoIP не определяет порядка четверти IP. В заголовках запроса клиента время вроде бы не передается.

Как выходят из такой ситуации?

anonymous, думай что говоришь и не забывай подписать отзыв :)
LovelAss
На сайте с 05.06.2009
Offline
96
#1
Metal_Messiah:
гемор с javascript функцией, выводящей время, посчитанное как определенное смещение от текущего не предлагать.

Правильно, оптимальные варианты нужно отметать сразу! Лучше взвалить всю работу на сервер и на свою глупую голову.

W7
На сайте с 30.01.2012
Offline
29
#2

Проблема в том, что нет правильного способа получить клиентское время без JS, поэтому насколько я знаю идеальный вариант - отображать в UTC, а на клиенте уже конвертировать. http://momentjs.com/ взгляните.

Metal Messiah
На сайте с 01.08.2010
Offline
152
#3

Ну тогда уже лучше форумный вариант - "столько-то минут назад"

Есть еще 1 проблема: при чтении 2 разными веб серверами из одной базы MySQL выводится на сайте разное время одного и того же события.

На 1 сервере БД и сайт, в системе GMT+0, выводит 08.09.14 12:03

На 2 сервере сайт, время EEST, выводит 08.09.14 16:03.

При подключении к MySQL даю запрос

SET time_zone = '+02:00'

или ставил 3 или 4 часа, в результате ничего не меняется, время все то же, везде хранится как unix timestamp (результат time() из php) int(4) unsigned.

Можно ли синхронизировать это не меняя системный часовой пояс на всех серверах на одинаковый?

Metal Messiah
На сайте с 01.08.2010
Offline
152
#4

Вообщем, все будут привыкать к понятию Greenwich Mean Time, о чем напишу мелким шрифтом. Системное время не трогал, все решил установкой

date_default_timezone_set('UTC');

в config.php, который инклюдится во все остальные скрипты сайта.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий