date_default_timezone_set()用于设置php脚本默认时区,影响date()等函数,需传iana标准标识符(如'asia/shanghai'),成功返回true;date_default_timezone_get()获取当前时区,未设置时返回php.ini配置值或utc。

在 PHP 7.4 中,date_default_timezone_set() 用于设置脚本运行时的默认时区,它会影响所有依赖系统时区的日期/时间函数(如 date()、strtotime()、getdate() 等)。设置后,可通过 date_default_timezone_get() 获取当前生效的时区。
设置默认时区
使用 date_default_timezone_set() 传入一个合法的时区标识符(如 'Asia/Shanghai'、'Europe/London'),成功返回 true,失败返回 false(通常因时区名错误)。
- 推荐使用 IANA 时区数据库标准名称(如
'Asia/Shanghai'),不建议用缩写(如'CST')或 UTC 偏移(如'+08:00'),因为它们不明确且不可靠 - 常见中国时区应写为
'Asia/Shanghai'(覆盖全国,包括北京、上海、重庆等),PHP 不支持'PRC'或'China/Beijing' - 可在脚本开头统一设置,也可按需动态切换(例如多用户多时区场景)
获取当前默认时区
调用 date_default_timezone_get() 即可返回当前生效的时区字符串。它不会触发警告,即使未显式设置过时区,也会返回 PHP 配置中 date.timezone 的值(或默认的 UTC)。
- 若未设置且 php.ini 中也未配置
date.timezone,该函数可能返回空字符串或发出E_WARNING(取决于 PHP 版本和 error_reporting 设置) - 建议在关键时间逻辑前检查返回值,确保时区符合预期
验证设置是否生效
最直接的方式是结合 date() 输出带时区信息的时间:
date_default_timezone_set('Asia/Shanghai');
echo date('Y-m-d H:i:s e'); // 输出类似:2024-05-20 15:30:45 Asia/Shanghai
对比不同设置下的输出,能清晰确认时区是否已变更。注意:e 格式字符会显示时区标识符,T 显示缩写(如 CST),但后者不唯一,不建议依赖。
注意事项与常见问题
该函数只影响当前请求/脚本进程,不影响其他请求或 PHP 配置本身;它不能替代服务器系统时区,也不改变 time() 返回的时间戳(时间戳始终是 Unix 时间,与时区无关)。
- 避免在循环或高频调用中反复设置,开销虽小但无必要
- 如果项目需支持多时区,建议封装时区上下文管理,而非频繁切换全局默认值
- 检查可用时区列表可用
timezone_identifiers_list(),但生产环境无需每次都查,应预设可信列表
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











