- Установка временнОй зоны в PHP
- Установка временной зоны на виртуальном хостинге
- date_default_timezone_set
- Parameters
- Return Values
- Examples
- See Also
- User Contributed Notes
- date_default_timezone_set
- Список параметров
- Возвращаемые значения
- Примеры
- Список изменений
- Смотрите также
- How to set timezone with PHP easily (multiple methods)
- Short guide on how to set the timezone using PHP using multiple methods.
- Quick solution
- Set timezone with PHP functions
- Set timezone with PHP using date_default_timezone_set
- Set timezone with PHP using DateTime
- Set timezone with PHP using ini_set
- Set timezone using server-side configuration
- Final thoughts
- You might also like
- References
Установка временнОй зоны в PHP
Иногда возникает такая ситуация, что текущее время на сервере не соответствует вашему текущему часовому поясу или часовому поясу региона, на который ориентирован ваш сайт.
Чтобы было понятно, напомню: территориально Россия очень большая, и далеко не всем нужно, чтобы их сайты «жили» по московскому времени. Например, Урал, Сибирь, Дальний восток и т.д.
Серверы большинства популярных российских хостинг-провайдеров размещены на технологических площадках Москвы и Санкт-Петербурга и по-умолочанию настроены, естественно, на московскую временну́ю зону. Сервер не может автоматически подстраиваться под ваше текущее местоположение и переводить системные часы. В связи с чем, работа функций даты и времени на сайте может быть не совсем корректной. Естественно, сейчас речь не идёт о CMS, в которых поправка часового пояса обычно присутствует прямо в интерфейсе администратора.
В первую очередь проверьте текущее состояние с помощью PHP-кода:
Хорошо, если у вас свой сервер и имеется доступ к php.ini, где можно задать нужную временну́ю зону и забыть. Например, таким образом:
date.timezone = Europe/Moscow
Правда, если на сервере размещены несколько проектов, в которых должны поддерживаться различные часовые пояса, тогда лучше этого не делать. В этом случае будет правильнее задать временные зоны только для проектов, где один часовой пояс.
Установка временной зоны на виртуальном хостинге
На виртуальном хостинге, доступа к конфигам сервера чаще всего нет. Поэтому, в первую очередь попробуйте задать временну́ю зону с помощью .htaccess. Просто найдите или создайте в корне своего сайта файл .htaccess и добавьте в него такую строку:
php_value date.timezone "Europe/Moscow"
Если способ не сработает, тогда воспользуемся функцией date_default_timezone_set(), которая устанавливает временную зону по умолчанию для всех функций даты и времени. Для этого нужно где-нибудь в начале скрипта просто добавьте такую строку:
date_default_timezone_set('Europe/Moscow');
Естественно, Europe/Moscow меняется на необходимый вам часовой пояс. Для территории РФ в PHP поддерживаются следующие временные зоны:
- Europe/Moscow
- Europe/Samara
- Europe/Kaliningrad
- Europe/Volgograd
- Asia/Anadyr
- Asia/Kamchatka
- Asia/Krasnoyarsk
- Asia/Magadan
- Asia/Novokuznetsk
- Asia/Novosibirsk
- Asia/Omsk
- Asia/Sakhalin
- Asia/Vladivostok
- Asia/Yakutsk
- Asia/Yekaterinburg
Со списком всех доступных временных зон можно ознакомиться по ссылке или выполнить команду, которая возвратит вам список временных зон, доступных на вашем сервере.
print_r(DateTimeZone::listIdentifiers());
⚡️ Подписывайся на мой канал @DanilinBiz и ты узнаешь, почему фриланс это свобода, а работа в штате рабство.
Делаю сайты на Вордпресс с 2008 года, в том числе уникальные инструменты для решения сложных бизнес‑задач.
date_default_timezone_set
date_default_timezone_set() sets the default timezone used by all date/time functions.
Instead of using this function to set the default timezone in your script, you can also use the INI setting date.timezone to set the default timezone.
Parameters
The timezone identifier, like UTC , Africa/Lagos , Asia/Hong_Kong , or Europe/Lisbon . The list of valid identifiers is available in the List of Supported Timezones.
Return Values
This function returns false if the timezoneId isn't valid, or true otherwise.
Examples
Example #1 Getting the default timezone
if ( strcmp ( $script_tz , ini_get ( 'date.timezone' ))) echo 'Script timezone differs from ini-set timezone.' ;
> else echo 'Script timezone and ini-set timezone match.' ;
>
?>See Also
User Contributed Notes
- Date/Time Functions
- checkdate
- date_add
- date_create_from_format
- date_create_immutable_from_format
- date_create_immutable
- date_create
- date_date_set
- date_default_timezone_get
- date_default_timezone_set
- date_diff
- date_format
- date_get_last_errors
- date_interval_create_from_date_string
- date_interval_format
- date_isodate_set
- date_modify
- date_offset_get
- date_parse_from_format
- date_parse
- date_sub
- date_sun_info
- date_sunrise
- date_sunset
- date_time_set
- date_timestamp_get
- date_timestamp_set
- date_timezone_get
- date_timezone_set
- date
- getdate
- gettimeofday
- gmdate
- gmmktime
- gmstrftime
- idate
- localtime
- microtime
- mktime
- strftime
- strptime
- strtotime
- time
- timezone_abbreviations_list
- timezone_identifiers_list
- timezone_location_get
- timezone_name_from_abbr
- timezone_name_get
- timezone_offset_get
- timezone_open
- timezone_transitions_get
- timezone_version_get
date_default_timezone_set
date_default_timezone_set() устанавливает временную зону по умолчанию для всех функций даты/времени в скрипте .
Замечание:
Начиная с версии PHP 5.1.0 (когда функции даты/времени были переписаны), вызов любой функции даты времени генерирует E_NOTICE , если временная зона имеет неверное значение, и/или E_WARNING , если используются системные параметры или переменная окружения TZ .
Вместо использования этой функции, Вы можете воспользоваться INI настройкой date.timezone для установки временной зоны по умолчанию.
Список параметров
Идентификатор временной зоны, как например UTC или Europe/Lisbon. Список поддерживаемых временных зон.
Возвращаемые значения
Функция возвращает FALSE , если timezone_identifier имеет неверное значение, в остальных случаях TRUE .
Примеры
Пример #1 Получение временной зоны по умолчанию
if ( strcmp ( $script_tz , ini_get ( 'date.timezone' ))) echo 'Временная зона скрипта отличается от заданной в INI-файле.' ;
> else echo 'Временные зоны скрипта и настройки INI-файла совпадают.' ;
>
?>Список изменений
Версия Описание 5.3.0 Теперь выбрасывает E_WARNING вместо E_STRICT . 5.1.2 Функция начала проверять timezone_identifier . Смотрите также
- date_default_timezone_get() - Возвращает временную зону, используемой по умолчанию всеми функциями даты/времени в скрипте
- Список поддерживаемых временных зон
How to set timezone with PHP easily (multiple methods)
Short guide on how to set the timezone using PHP using multiple methods.
Quick solution
The easiest way to set timezone with PHP is by the date_default_timezone_set() function. This function sets the default timezone used by all date/time functions in PHP. For example, to set the timezone to Asia/Hong_Kong :
date_default_timezone_set('Asia/Hong_Kong');
For a full list of supported timezones, check the official PHP.net Documentation timezone list. That is how to set timezone with PHP. For more methods and examples, please check the rest of the article.
Set timezone with PHP functions
Set timezone with PHP using date_default_timezone_set
date_default_timezone_set(string $timezoneId): bool
Where $timezoneId is the string of the timezone to be set. The function will return true if the timezone is valid, else it will return false. Tips: To get the current timezone that is set in PHP configuration, use date_default_timezone_get function:
echo date_default_timezone_get(); // returns the configured timezone
Set timezone with PHP using DateTime
Another method to set timezone with PHP is by object-oriented way using the DateTime object and the DateTimeZone class. The major difference here is the timezone will be set only per created object. Therefore, this method can be used when you want to have multiple variables with multiple timezones, or if the timezone is interchangeable. For example, we want to have two DateTime object with different timezones:
$dateHongKong = new DateTime('2023-01-01', new DateTimeZone('Asia/Hong_Kong')); echo $dateHongKong->format('Y-m-d H:i:sP'); // 2023-01-01 00:00:00+08:00 $dateJapan = new DateTime('2023-01-01', new DateTimeZone('Asia/Tokyo')); echo $dateJapan->format('Y-m-d H:i:sP'); // 2023-01-01 00:00:00+09:00
Another example is a single DateTime object that can have its timezone updated with DateTime::setTimezone() :
// Hong Kong timezone $date = new DateTime('2023-01-01', new DateTimeZone('Asia/Hong_Kong')); // Change to Japan timezone $date->setTimeZone(new DateTimeZone('Asia/Tokyo'));
Set timezone with PHP using ini_set
We can also modify timezone configuration dynamically using ini_set function to modify the date.timezone configuration variable:
ini_set('date.timezone', 'America/New_York');
Set timezone using server-side configuration
- In php.ini file, look for the [Date] section;
- Uncomment the date.timezone configuration line by removing the ; sign at the beginning of the line;
- Input the desired timezone after the = sign.
. [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Asia/Japan .
Remember to restart the web server after changing the setting in php.ini .
Final thoughts
These are the methods to set timezone with PHP using multiple methods. We hope these methods are helpful to you, and that they can be utilized in many use cases.
You might also like
References