timezone_identifiers_list()在PHP 8.3中仍是DateTimeZone::listIdentifiers()别名,仅返回有效非过时时区标识符;需显式传DateTimeZone::ALL_WITH_BC才含废弃项;$countryCode仅在PER_COUNTRY模式下生效;不支持模糊匹配或缩写;无内置缓存,高频调用需自行优化。

PHP 8.3 中 timezone_identifiers_list() 本身没有新增限制,它仍是 DateTimeZone::listIdentifiers() 的别名,行为完全一致。但实际使用时需注意几类关键约束:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
仅返回有效、非过时的 IANA 时区标识符
该函数默认只返回当前 IANA 时区数据库中「未弃用」的标识符。例如:America/Indiana/Indianapolis 会被包含,
但已废弃的旧别名如 America/Indianapolis(自 2011 年起标记为 deprecated)不会出现在结果中。
如需包含过时项,必须显式传入 DateTimeZone::ALL_WITH_BC 作为第一个参数。
国家代码参数仅在 PER_COUNTRY 模式下生效
第二个参数 $countryCode(如 "CN")只有在 $timezoneGroup 设为 DateTimeZone::PER_COUNTRY 时才起作用。其他模式(如 ASIA、ALL)会忽略该参数,不报错也不过滤。
不支持模糊匹配或缩写解析
它不处理类似 "CST"、"PST"、"GMT+8" 这类非标准字符串。
这些缩写存在歧义(比如 PST 可能指美国太平洋标准时间,也可能指菲律宾标准时间),且不是合法 IANA 标识符。
若需校验用户提交的时区名(例如来自前端 Intl.DateTimeFormat().resolvedOptions().timeZone),必须用此函数检查是否在返回列表中,不能靠字符串匹配或正则推断。
无内置缓存,高频调用需自行优化
每次调用都重新生成完整数组(通常含 400+ 项),不复用内部状态。
若在请求中反复调用(如每个 API 响应都查一次),建议:
- 在应用启动时缓存结果(如 $_SERVER['TZ_LIST'] = timezone_identifiers_list();)
- 或按需缓存子集(如只缓存 DateTimeZone::ASIA 列表供地区筛选页使用)


















