php.ini 'date.timezone' не имеет никакого эффекта

В моем php.ini я установил:

date.timezone = "Etc/UTC"

И время сервера тоже UTC+0, но когда я пытаюсь получить часовой пояс с помощью этого скрипта:

<?php print(date_default_timezone_get()); ?>

он возвращается

Европа/Берлин

который является UTC+2, а не UTC+0, и я не понимаю, как он туда попадает.

Просто чтобы уточнить:

  • Я сохранил правильный файл по правильному пути и перезапустил свой сервер.
  • Я не хочу изменять свои сценарии, потому что я уже использовал date() способ часто
  • Я хочу, чтобы время было UTC+0 для PHP, просто изменив конфигурацию
  • Я хочу, чтобы всегда было UTC+0, игнорируя летнее/зимнее время.

person Sainan    schedule 02.05.2016    source источник
comment
print(date_default_timezone_get()) проверьте это перед операцией   -  person Minesh Patel    schedule 02.05.2016
comment
Лето/зима?   -  person Andreas    schedule 02.05.2016
comment
Европа/Берлин не UTC   -  person Minesh Patel    schedule 02.05.2016
comment
это означает, что вы установили date_default_timezone_set('Europe/Berlin'); где-то в сценарии??   -  person Minesh Patel    schedule 02.05.2016
comment
@MineshPatel Я знаю, но я хочу, чтобы это было UTC   -  person Sainan    schedule 02.05.2016
comment
использовать класс DateTime   -  person Minesh Patel    schedule 02.05.2016
comment
@MineshPatel Я хочу сохранить свои функции date(), потому что я часто их использовал.   -  person Sainan    schedule 02.05.2016
comment
есть только 2 пути. найдите, где он переопределяет часовой пояс или измените свой код   -  person Minesh Patel    schedule 02.05.2016
comment
$date = new DateTime(date('Y-m-d H:i:s')); $date-›setTimezone(новый DateTimeZone('UTC')); echo $date-›format('Y-m-d H:i:s a'); это даст вам время даты в UTC   -  person Minesh Patel    schedule 02.05.2016
comment
распечатайте phpinfo () и проверьте значение часового пояса по умолчанию и date.timezone, которые они установили в UTC или Europe/Berlin?   -  person Minesh Patel    schedule 02.05.2016


Ответы (5)


Эта строка, безусловно, является правильным местом для изменения часового пояса по умолчанию.

  1. Вы действительно меняете правильный php.ini? Некоторые установки могут иметь несколько файлов .ini. Запустите phpinfo(); и проверьте Загруженный файл конфигурации, чтобы убедиться, что это именно тот файл.

  2. Проверьте, нет ли в файле других определений этого параметра. Это может переопределить то, что вы установили, если вы просто скопировали и вставили его куда угодно.

  3. Убедитесь, что код не переопределяет то, что вы установили в файле .ini. date_default_timezone_set() устанавливает его (и переопределяет) в PHP.

  4. Проверьте phpinfo() для получения дополнительной информации о текущем часовом поясе.

person Andrius    schedule 02.05.2016
comment
Часовой пояс по какой-то причине UTC+2 (Европа/Берлин), и я не знаю, что его переопределяет. И конфиг правильный. - person Sainan; 02.05.2016
comment
@timmyRS в чем проблема? - person Minesh Patel; 02.05.2016
comment
@MineshPatel написал это в моем вопросе. действительно что-то в конфиге переопределяло его... - person Sainan; 02.05.2016

В комментариях Минеш Патель посоветовал мне проверить, не переписывает ли что-то мой вариант, поэтому я просмотрел свой < strong>php.ini для Europe/Berlin, и оказалось, что была еще одна date.timezone-запись, которая перезаписала ее.

person Sainan    schedule 06.10.2016

Вы проверили переменную среды «TZ» для пользователя вашего веб-сервера? Если он установлен, параметр date.timezone php.init не будет работать должным образом, как указано в файле руководство по php:

date.timezone строка Часовой пояс по умолчанию, используемый всеми функциями даты/времени. До PHP 5.4.0 это работало только в том случае, если переменная среды TZ не была установлена. Порядок приоритета, для которого используется часовой пояс, если ни один из них явно не указан, описан на странице date_default_timezone_get().

person JSchirrmacher    schedule 02.05.2016
comment
Я действительно понятия не имею, что такое переменная TZ и где ее найти ._. - person Sainan; 02.05.2016
comment
Если вы работаете в Linux, просто введите echo $TZ, чтобы увидеть текущую настройку, или export TZ=UTC, чтобы установить ее. Но вы должны сделать это как пользователь веб-сервера перед запуском сервера. Обычно это делается в сценарии инициализации во время загрузки. Попробуйте redhat-config-date или dpkg-reconfigure tzdata настроить его (в зависимости от используемого вами дистрибутива Linux) - person JSchirrmacher; 02.05.2016

Я предлагаю вам обратиться к этому списку, чтобы выбрать свой часовой пояс:

Часовые пояса PHP

Предупреждение. Не используйте часовые пояса, перечисленные в следующей ссылке, они существуют только по причинам обратной совместимости, кроме UTC:

Часовые пояса PHP указаны только в целях обратной совместимости

Настоятельно рекомендуется использовать правильный часовой пояс для вашего местоположения, например Европа/Берлин:

date.timezone = "Europe/Berlin"
person demartis    schedule 02.05.2016
comment
Моя проблема в том, что часовой пояс уже ЕСТЬ Европа/Берлин, но ДОЛЖЕН быть UTC+0 - person Sainan; 02.05.2016

Найдите «Европа/Берлин» в вашем файле php.ini (получите правильный путь к файлу с помощью phpinfo();)

В некоторых случаях параметры "date.timezone" встречаются в файле дважды.

Убедитесь, что вы указали правильные часовые пояса из здесь (часовые пояса php)

person Sergio T    schedule 09.04.2019