Использование настроек часового пояса системы в PHP - PullRequest
3 голосов
/ 24 декабря 2011

Итак, у меня есть веб-приложение, написанное на PHP, которое будет работать на разных серверах Ubuntu по всему миру. Некоторые из серверов будут настроены для работы по местному времени, некоторые будут работать по UTC, это зависит от клиента.

Хотя я могу отредактировать php.ini-файл и установить date.timezone, вручную ввести такие данные обязательно однажды неправильно.

Как мне заставить PHP использовать часовой пояс, уже определенный в системе (tzdata)?

Или, другими словами: как мне извлечь (длинное) имя часового пояса из системы в PHP для использования в date_default_timezone_set ()?

Ответы [ 2 ]

4 голосов
/ 24 декабря 2011

С помощью того, что Андрей Кнупп дал в своем ответе, я смог решить этот вопрос.

echo "Time: " . date("Y-m-d H:i:s") . "<br>\n";

$shortName = exec('date +%Z');
echo "Short timezone:" . $shortName . "<br>";

$longName = timezone_name_from_abbr($shortName);
echo "Long timezone:" . $longName . "<br>";

date_default_timezone_set($longName);
echo "Time: " . date("Y-m-d H:i:s") . "<br>\n";

Дает вывод:

Time: 2011-12-23 23:29:45
Short timezone:MYT
Long timezone:Asia/Kuala_Lumpur
Time: 2011-12-24 06:29:45

Обновление : Короткое имя для часовых поясов не является уникальным.Например, как в Америке, так и в Австралии есть «EST», ведущее timezone_name_from_abbr, чтобы иногда выбирать тот, который я не хочу ... Вы можете задать дату, насколько велико смещение, и это можно использовать для дальнейшего соответствияправильный часовой пояс:

$offset = exec('date +%::z');
$off = explode (":", $offset);
$offsetSeconds = $off[0][0] . abs($off[0])*3600 + $off[1]*60 + $off[2];
$longName = @timezone_name_from_abbr($shortName, $offsetSeconds);
2 голосов
/ 24 декабря 2011

Если у вас установлен часовой пояс, вы можете использовать: http://php.net/manual/en/function.date-default-timezone-get.php

Или http://php.net/manual/en/function.timezone-name-from-abbr.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...