Date default timezone set: примеры (PHP)

Настройка временной зоны через date_default_timezone_set в PHP
Раздел: Дата и время
date_default_timezone_set(string $timezone_id): bool
Описание функции date_default_timezone_set

Функция date_default_timezone_set устанавливает временную зону по умолчанию для всех функций даты/времени в скрипте. Использование функции необходимо, когда требуется обеспечить корректное отображение и вычисление временных меток для конкретного географического региона.

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

Аргументы функции

Функция принимает один обязательный аргумент:

  • $timezoneId (string) - идентификатор временной зоны. Должен быть одним из поддерживаемых значений, например 'Europe/Moscow', 'UTC', 'America/New_York'. Полный список доступен в документации PHP.
Примеры использования date_default_timezone_set
Базовый пример

Установка временной зоны и вывод текущей даты:

date_default_timezone_set('Europe/Moscow');
echo date('Y-m-d H:i:s');
2023-10-05 15:30:45
Использование с функцией time()
date_default_timezone_set('Asia/Tokyo');
echo 'Токийское время: ' . date('H:i', time());
Токийское время: 21:30
Проверка установленной зоны
date_default_timezone_set('America/Los_Angeles');
echo date_default_timezone_get();
America/Los_Angeles
Похожие функции в PHP

В PHP существуют альтернативные способы работы с временными зонами:

ini_set()

Позволяет установить временную зону через конфигурацию PHP:

ini_set('date.timezone', 'Europe/London');

Используется, когда нужно изменить настройку без изменения кода функций.

DateTimeZone с DateTime

Объектно-ориентированный подход с явным указанием зоны:

$tz = new DateTimeZone('Europe/Paris');
$date = new DateTime('now', $tz);
echo $date->format('Y-m-d H:i:s');

Предпочтительнее при работе с разными зонами в одном скрипте.

Возвращает текущую установленную временную зону. Используется для проверки и отладки.

Аналоги в других языках

Date default timezone set в Python

Используется модуль pytz или zoneinfo:

from datetime import datetime
import pytz
tz = pytz.timezone('Europe/Berlin')
print(datetime.now(tz))
2023-10-05 14:45:22+02:00

Date default timezone set в Javascript

В JavaScript временная зона устанавливается глобально через Intl:

console.log(new Date().toLocaleString('ru-RU', { timeZone: 'Europe/Moscow' }));
05.10.2023, 15:30:45

Date default timezone set в MySQL

Установка временной зоны для сессии:

SET time_zone = '+03:00';
SELECT NOW();
2023-10-05 15:30:45
Типичные ошибки
Неверный идентификатор зоны
date_default_timezone_set('Moscow/Europe');
Warning: date_default_timezone_set(): Timezone ID 'Moscow/Europe' is invalid
Использование устаревших идентификаторов
date_default_timezone_set('US/Eastern');

Может вызвать предупреждение, так как идентификатор считается устаревшим.

Вызов после использования функций даты
echo date('H:i');
date_default_timezone_set('UTC');
echo date('H:i');

Временная зона не применяется к уже выполненным вызовам.

Изменения в последних версиях PHP

В PHP 8.0.0 функция перестала принимать параметр $timezoneId, который мог быть числовым смещением (+02:00). Теперь принимаются только строковые идентификаторы из базы данных временных зон.

В PHP 5.5.10 и 5.6.0 введена проверка корректности идентификатора временной зоны. При неверном значении генерируется предупреждение уровня E_WARNING.

Расширенные примеры
Динамическое определение зоны по местоположению
Пример php
$userTimezone = 'Asia/Vladivostok';
date_default_timezone_set($userTimezone);
$localTime = date('Y-m-d H:i:s');
echo "Местное время пользователя: $localTime";
Местное время пользователя: 2023-10-05 22:30:45
Конвертация между зонами
Пример php
date_default_timezone_set('UTC');
$utcTime = time();
date_default_timezone_set('Australia/Sydney');
echo 'Сидней: ' . date('H:i', $utcTime);
Сидней: 01:30
Использование с микросекундами
Пример php
date_default_timezone_set('Europe/Kiev');
$date = DateTime::createFromFormat('U.u', microtime(true));
echo $date->format('H:i:s.u');
15:30:45.123456
Обработка летнего времени
Пример php
date_default_timezone_set('Europe/London');
$winter = strtotime('2023-01-15');
$summer = strtotime('2023-06-15');
echo date('P', $winter) . ' ' . date('P', $summer);
+00:00 +01:00

PHP date_default_timezone_set function comments

En
Date default timezone set Sets the default timezone used by all date/time functions in a script