Нет надежного способа прочитать настройки часового пояса пользователя из PHP или JavaScript.
В JavaScript вы можете прочитать смещение между временем по Гринвичу и временем в текущем часовом поясе пользователя, но это не дает вам имя часового пояса, поэтому вы оставляете либо оставив идентификатор часового пояса выключенным (что делает время совершенно неопределенным) или в том числе это явное смещение типа UTC+01:00
, которое некрасиво и все еще не заботится об изменении часовых поясов в разные периоды летнего времени.
Как говорит Боба, вы можете использовать toLocaleString()
в JavaScript Date
для вывода его в реальном часовом поясе рабочего стола клиента. Однако, таким образом, вы не получаете никакого контроля над форматированием даты. Например, на моей машине Chrome выводит громоздкие:
Sat May 29 2010 15:03:46 GMT+0200 (W. Europe Daylight Time)
В то время как Опера просто кашляет:
29/05/2010 15:03:46
Что, поскольку оно вообще не устанавливает часовой пояс, является бесполезно двусмысленным. IE аналогично лаконичен, и Safari также не указывает часовой пояс. Firefox делает для меня в Linux, но не в Windows. Argh.
Так что, если вам нужна надежность, единственный способ обработки часовых поясов - это позволить пользователю вручную выбрать один из них в настройках своего сайта, а затем выполнить преобразование из UTC в этот часовой пояс, когда вы создаете для них страницу. В JavaScript вы можете догадаться, какая из наиболее вероятных часовых поясов наиболее вероятна (см. этот вопрос для стратегий), но вы не можете гарантировать, что вы правы.