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

Использование date_default_timezone_get для получения временной зоны
Раздел: Дата и время
date_default_timezone_get: string

Функция date_default_timezone_get() в PHP возвращает временную зону, которая используется по умолчанию для всех функций даты и времени в скрипте.

Назначение и использование

Функция применяется для определения текущей настройки временной зоны. Она не принимает аргументов и возвращает строку, соответствующую имени временной зоны.

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

Примеры применения

Базовое использование

Получение текущей временной зоны.

echo date_default_timezone_get();
Europe/Moscow
Проверка зоны перед установкой

Часто используется перед изменением зоны, чтобы сохранить предыдущее значение.

$oldZone = date_default_timezone_get();
date_default_timezone_set('America/New_York');
echo 'Старая зона: ' . $oldZone . '\n';
echo 'Новая зона: ' . date_default_timezone_get();
Старая зона: Europe/Moscow
Новая зона: America/New_York

Альтернативные функции в PHP

ini_get('date.timezone')

Прямое получение значения настройки из конфигурационного файла php.ini. Может отличаться от результата date_default_timezone_get(), если зона была изменена во время выполнения скрипта.

DateTimeZone::listIdentifiers()

Возвращает массив всех поддерживаемых идентификаторов временных зон. Полезен для создания списков выбора.

date_timezone_get() для объекта DateTime

Получает временную зону конкретного объекта DateTime, а не глобальную настройку скрипта.

Распространенные ошибки

Ожидание изменения зоны после date_default_timezone_set

Если функция вызывается до изменения зоны, она вернет старое значение.

echo date_default_timezone_get(); // Europe/Moscow
date_default_timezone_set('UTC');
echo date_default_timezone_get(); // UTC
Europe/Moscow
UTC
Игнорирование возвращаемого значения

Функция возвращает строку, а не объект. Попытка использовать методы объекта приведет к ошибке.

$zone = date_default_timezone_get();
echo $zone->getName();
Fatal error: Uncaught Error: Call to a member function getName() on string

Изменения в версиях PHP

В PHP 5.4.0 функция начала возвращать значение временной зоны в порядке приоритета: установленную через date_default_timezone_set(), значение из php.ini (date.timezone), или зону UTC, если предыдущие не заданы. В более ранних версиях поведение могло отличаться, и функция могла вернуть FALSE.

Начиная с PHP 7.0, при некорректной временной зоне в настройках генерируется предупреждение E_WARNING вместо E_STRICT.

Расширенные примеры использования

Определение смещения временной зоны

Получение временной зоны и создание объекта DateTimeZone для дальнейших расчетов.

Пример php
$timezoneName = date_default_timezone_get();
$timezone = new DateTimeZone($timezoneName);
$dateTime = new DateTime('now', $timezone);
echo $timezone->getOffset($dateTime) / 3600 . ' часов';
3 часа
Валидация временной зоны сервера

Проверка, соответствует ли установленная зона ожидаемой.

Пример php
$expectedZone = 'Europe/Moscow';
if (date_default_timezone_get() !== $expectedZone) {
    date_default_timezone_set($expectedZone);
    echo 'Временная зона изменена на ' . $expectedZone;
} else {
    echo 'Временная зона корректна';
}
Временная зона корректна
Логирование информации о зоне

Использование в отладочных целях для записи в лог.

Пример php
error_log('Скрипт выполняется в временной зоне: ' . date_default_timezone_get());
// Запись в лог-файл
Создание отчета о конфигурации

Сбор информации о настройках даты и времени для системного отчета.

Пример php
$configReport = [
    'Временная зона' => date_default_timezone_get(),
    'Время на сервере' => date('Y-m-d H:i:s'),
    'Время по UTC' => gmdate('Y-m-d H:i:s')
];
print_r($configReport);
Array
(
    [Временная зона] => Europe/Moscow
    [Время на сервере] => 2023-10-05 15:30:00
    [Время по UTC] => 2023-10-05 12:30:00
)

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

Date default timezone get в Python

Используется модуль datetime. Глобальная настройка зоны отсутствует, обычно работают с осведомленными об зоне объектами.

import datetime, pytz
print(datetime.datetime.now().astimezone().tzinfo)
MSK

Date default timezone get в Javascript

В браузерном JS аналогом можно считать Intl.DateTimeFormat().resolvedOptions().timeZone.

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);
Europe/Moscow

Date default timezone get в MySQL

Используется системная переменная @@session.time_zone или функция TIMEDIFF(NOW(), UTC_TIMESTAMP()) для получения смещения.

SELECT @@session.time_zone;
+00:00

PHP date_default_timezone_get function comments

En
Date default timezone get Gets the default timezone used by all date/time functions in a script