Функция 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').
Использование
Типичный вызов выглядит следующим образом:
- Проверьте наличие расширения через
extension_loaded('intl'), чтобы скрипт не упал с фатальной ошибкой на серверах без этого расширения. - Вызовите
timezone_version_get()для получения строки с версией. - Сохраните, запишите в журнал или отобразите значение — либо сравните его с ожидаемым минимумом.
Пример
Ниже приведён пример кода, демонстрирующий использование функции timezone_version_get() в PHP-приложениях:
Пример использования функции timezone_version_get() в PHP
Примечание: для работы этой функции необходимо расширение 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') перед вызовом, и рассмотрите возможность сравнения возвращаемой версии с известным минимумом, чтобы устаревшие правила часовых поясов выявлялись на этапе развёртывания, а не проявлялись некорректными временными метками в продакшене.