W3docs

Функция PHP timezone_version_get

Узнайте, как использовать функцию timezone_version_get() в PHP для получения версии базы данных часовых поясов расширения intl.

Функция timezone_version_get() возвращает версию базы данных часовых поясов, поставляемой вместе с расширением intl. База данных часовых поясов (известная также как tz database или IANA tz data) является официальным источником правил часовых поясов мира — смещений UTC, переходов на летнее время и исторических изменений. Правительства регулярно изменяют эти правила, поэтому база данных обновляется несколько раз в год и помечается версией вида 2024.1.

Знание версии важно, поскольку устаревшие правила приводят к неверному времени. Если страна изменила дату начала перехода на летнее время, а на сервере по-прежнему используется старая база данных, все вычисления дат в этот период будут расходиться на час. timezone_version_get() позволяет узнать, какую именно версию использует PHP, чтобы проверить актуальность данных, записать её в журнал или предупредить об устаревании.

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

Синтаксис

Функция timezone_version_get() имеет очень простой синтаксис:

Синтаксис функции PHP timezone_version_get()

string timezone_version_get ( void )

Доступна начиная с PHP 5.2.0.

Функция не принимает никаких аргументов и возвращает string с номером версии, например 2023.3 или 2024.1. Формат — ГГГГ.N: четырёхзначный год выпуска IANA, за которым следует порядковый номер выпуска в этом году (a, b, c… в нотации IANA становятся .1, .2, .3).

Примечание: timezone_version_get() является частью расширения intl, а не основного расширения date/time. Она сообщает версию данных о часовых поясах, включённых в intl/ICU, которая может отличаться от версии, используемой классами DateTime/DateTimeZone. Чтобы проверить наличие расширения intl, перед вызовом используйте extension_loaded('intl').

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

Типичный вызов выглядит следующим образом:

  1. Проверьте наличие расширения через extension_loaded('intl'), чтобы скрипт не упал с фатальной ошибкой на серверах без этого расширения.
  2. Вызовите timezone_version_get() для получения строки с версией.
  3. Сохраните, запишите в журнал или отобразите значение — либо сравните его с ожидаемым минимумом.

Пример

Ниже приведён пример кода, демонстрирующий использование функции timezone_version_get() в PHP-приложениях:

Пример использования функции timezone_version_get() в PHP

php— editable, runs on the server

Примечание: для работы этой функции необходимо расширение intl. Если расширение не включено, функция будет недоступна. Приведённый пример содержит проверку для предотвращения фатальной ошибки.

Предупреждение об устаревшей базе данных

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

<?php
$minimum = '2024.1';
$current = timezone_version_get();

if (version_compare($current, $minimum, '<')) {
    echo "Warning: timezone database $current is older than $minimum. Update the intl/ICU library.";
} else {
    echo "Timezone database $current is up to date.";
}
?>

version_compare() обрабатывает версию с точкой как версию программного обеспечения, поэтому 2024.1 корректно определяется как более новая, чем 2023.3.

Связанные функции

timezone_version_get() — единственная функция, сообщающая версию базы данных. Остальные инструменты работы с часовыми поясами в PHP работают непосредственно с данными:

  • date_default_timezone_set() и date_default_timezone_get() — устанавливают и считывают часовой пояс по умолчанию, используемый всеми функциями работы с датами.
  • timezone_identifiers_list() — выводит список всех поддерживаемых идентификаторов часовых поясов (например, Europe/London).
  • timezone_name_get() — возвращает имя объекта DateTimeZone.
  • timezone_abbreviations_list() — сопоставляет аббревиатуры, такие как CET, с их смещениями.

Заключение

timezone_version_get() — небольшая, но практичная функция: она позволяет точно узнать, какую версию базы данных часовых поясов IANA использует расширение intl. Всегда выполняйте проверку через extension_loaded('intl') перед вызовом, и рассмотрите возможность сравнения возвращаемой версии с известным минимумом, чтобы устаревшие правила часовых поясов выявлялись на этапе развёртывания, а не проявлялись некорректными временными метками в продакшене.

Практика

Практика
Какова функция timezone_version_get() в PHP?
Какова функция timezone_version_get() в PHP?
Was this page helpful?