timezone_identifiers_list()用于获取php支持的全部时区标识符列表,返回索引数组;可结合preg_grep按前缀筛选,用in_array验证时区有效性,建议缓存结果以提升性能。

PHP 7.4 中 timezone_identifiers_list() 是一个内置函数,用于获取 PHP 支持的所有时区标识符列表(如 "Asia/Shanghai"、"Europe/London"),无需额外扩展或配置。
基本用法:直接调用获取全部时区
该函数不接受参数(PHP 5.2+ 起已废弃参数),直接调用即可返回包含所有时区字符串的索引数组:
$timezones = timezone_identifiers_list(); print_r($timezones); // 输出约 400+ 个时区,如 "Africa/Abidjan", "Asia/Shanghai" 等
按地区筛选时区(常用实用方式)
虽然函数本身不支持过滤,但可结合 preg_grep() 按前缀快速筛选,例如只看亚洲时区:
$asia = preg_grep('/^Asia\//', timezone_identifiers_list());$europe = preg_grep('/^Europe\//', timezone_identifiers_list());$america = preg_grep('/^America\//', timezone_identifiers_list());
注意:匹配需用完整前缀(如 "Asia/" 后带斜杠),避免误匹配 "Asia/Tokyo" 和 "Asia/Kolkata" 之外的干扰项。
验证某个时区是否有效(安全使用前提)
获取列表后,常需检查用户输入的时区是否合法。可用 in_array() 判断:
$user_tz = 'Asia/Shanghai';
if (in_array($user_tz, timezone_identifiers_list())) {
date_default_timezone_set($user_tz);
echo date('Y-m-d H:i:s'); // 安全输出
} else {
echo '无效的时区标识符';
}
⚠️ 注意:不要依赖 DateTimeZone::__construct() 的异常来判断——部分非法字符串可能不抛异常,而 in_array + 全量列表是最可靠方式。
性能提示:结果可缓存,无需每次调用
timezone_identifiers_list() 返回的是静态数据,内容在 PHP 启动时即确定,不会随系统时区文件更新实时变化(需重启 PHP 进程才生效)。因此建议:
- 在应用启动时一次性获取并缓存到变量或 APCu 中
- 避免在高频接口中反复调用(虽无严重性能问题,但没必要)
- 若只需固定几个时区(如仅支持中国、美国、欧洲各1–2个),可硬编码数组,更轻量
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











