PHP 8.4: Intl: 新增 intltz_get_iana_id 函数和 IntlTimeZone::getCanonicalID 方法
在 PHP 8.4 中,Intl 扩展提供了一个名为 intltz_get_iana_id
的新函数以及一个 IntlTimeZone
类上的新的静态方法IntlTimeZone::getIanaID()
,其返回 IANA 时区 ID。
大多数情况下,其返回值与传递的时区标识符相同。然而,在给定的时区标识符被弃用或有替换的的时区标识符的情况下,这些新函数/方法有助于规范时区标识符。
例如,塞浦路斯的时区,Asia/Nicosia
,有时被用作 Europe/Nicosia
。新的 intltz_get_iana_id
函数和 IntlTimeZone::getIanaID()
方法提供了一种发现这些不一致并检索时区的正确 iana 标识符的简单方法。
有关受影响时区标识符的列表,请参阅 IANA tzdata/backward 。
只有在当 Intl 扩展使用 ICU 74 或更高版本编译时,此功能才可用。
intltz_get_iana_id('Europe/Berlin'); // Valid, returns the same
// "Europe/Berlin"
IntlTimeZone::getIanaID('America/New_York'); // Valid, returns the same
// "America/New_York"
intltz_get_iana_id('Mars'); // Invalid, returns false
// false
intltz_get_iana_id('Europe/Nicosia'); // Returns as Asia/Nicosia
// "Asia/Nicosia"
IntlTimeZone::getIanaID('Asia/Chongqing'); // Duplicating existing location
// "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
与此类似,但返回的是系统规范时区 ID,其与 IANA 时区列表部分重叠(不完全)。
向后兼容性影响
新增的 intltz_get_iana_id
函数在全局命名空间中声明,除非 PHP 应用声明了同名函数,这不会导致任何兼容性问题。
继承 IntlTimeZone
而不实现不兼容的 getIanaID
方法的 PHP 类也不会遇到任何向后兼容性问题。
IANA 时区标识符数据来自 ICU 库。通过硬编码需要“规范化”的时区标识符,可以在用户空间 PHP 对 intltz_get_iana_id
函数进行 polyfill。然而,这可能不可靠,需要额外的维护来保持此列表的最新状态。