PHP 8.4: Intl: Новая функция intltz_get_iana_id и метод IntlTimeZone::getIanaID

Источник: «PHP 8.4: Intl: New intltz_get_iana_id function and IntlTimeZone::getCanonicalID method»
Расширение Intl в PHP 8.4 предоставляет новую функцию intltz_get_iana_id и новый статический метод IntlTimeZone::getIanaID() в классе IntlTimeZone, возвращающий идентификатор часового пояса IANA для переданного идентификатора часового пояса.

В большинстве ситуаций возвращаемое значение совпадает с переданным идентификатором часового пояса. Однако в ситуациях, когда данный идентификатор часового пояса устарел или заменён другим идентификатором часового пояса, новая функция/метод поможет канонизировать идентификатор часового пояса.

Например, часовой пояс для Кипра, Asia/Nicosia, иногда используется как Europe/Nicosia. Новая функция intltz_get_iana_id и метод IntlTimeZone::getIanaID() обеспечивают простой способ поиска подобных несоответствий и получения правильного идентификатора IANA для часового пояса.

Список изменённых идентификаторов часовых поясов см. в IANA tzdata/backward.

intltz_get_iana_id('Europe/Berlin'); // Валидный, возвращается тот же
// "Europe/Berlin"

IntlTimeZone::getIanaID('America/New_York'); // Валидный, возвращается тот же
// "America/New_York"
intltz_get_iana_id('Mars'); // Невалидный, возвращается false
// false
intltz_get_iana_id('Europe/Nicosia'); // Возвращается Asia/Nicosia
// "Asia/Nicosia"

IntlTimeZone::getIanaID('Asia/Chongqing'); // Дублирует существующую локацию
// "Asia/Shanghai"

Синопсис функции intltz_get_iana_id

/**
* Get the IANA identifier from a given timezone
* @param string $timezoneId
* @return string|false
*/

function intltz_get_iana_id(string $timezoneId): string|false {}

Синопсис метода IntlTimeZone::getIanaID()

class IntlTimeZone {
// ...

/**
* Get the IANA identifier from a given timezone
* @param string $timezoneId
* @return string|false
*/

public static function getIanaID(string $timezoneId): string|false {}

// ...
}

Влияние на обратную совместимость

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

PHP классы, расширяющие IntlTimeZone без реализации несовместимого метода getIanaID, также не будут испытывать проблем с обратной совместимостью.

Данные об идентификаторах часовых поясов IANA поступают из библиотеки ICU. Можно использовать полифилл функции intltz_get_iana_id в пользовательском PHP, жёстко закодировав идентификаторы часовых поясов, которые должны быть "канонизированы". Однако это может быть ненадёжно и требует дополнительного сопровождения для поддержания этого списка в актуальном состоянии.

Комментарии


Дополнительные материалы

Предыдущая Статья

Новое в Symfony 7.2: Новая опция choice_lazy для ChoiceType

Следующая Статья

Новое в Symfony 7.2: Улучшения компонента String