PHP 8.4: Intl: Новая функция intltz_get_iana_id и метод IntlTimeZone::getIanaID
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
// falseintltz_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 {}intltz_get_iana_idобъявлен в глобальном пространстве имён.- При передаче невалидного ID часового пояса возвращается
false. - См. также:
intltz_get_canonical_id, который похож, но возвращает системный канонический ID часового пояса, совпадающий (но не полностью) со списком часовых поясов IANA.
Синопсис метода 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 {}
// ...
}- Новый метод
getIanaIDявляетсяstaticметодом. - Псевдоним функции
intltz_get_iana_id. - При передаче недопустимого ID часового пояса возвращается
false. - См. также:
IntlTimeZone::getCanonicalID, который похож, но возвращает системный канонический идентификатор часового пояса, совпадающий (но не полностью) со списком часовых поясов IANA.
Влияние на обратную совместимость
Новая функция intltz_get_iana_id объявлена в глобальном пространстве имён, и если PHP приложение не объявит функцию с идентичным именем, это не должно вызвать проблем с обратной совместимостью.
PHP классы, расширяющие IntlTimeZone без реализации несовместимого метода getIanaID, также не будут испытывать проблем с обратной совместимостью.
Данные об идентификаторах часовых поясов IANA поступают из библиотеки ICU. Можно использовать полифилл функции intltz_get_iana_id в пользовательском PHP, жёстко закодировав идентификаторы часовых поясов, которые должны быть "канонизированы". Однако это может быть ненадёжно и требует дополнительного сопровождения для поддержания этого списка в актуальном состоянии.