登录
首页 >  文章 >  php教程

PHP正确时区设置方法与标识符写法

时间:2026-03-25 11:11:32 163浏览 收藏

PHP时区设置必须严格遵循IANA官方时区数据库规范,仅接受如Asia/Shanghai这样大小写敏感、斜杠分隔的标准标识符,禁用CST、+08:00、China/Beijing等常见错误写法,否则将触发“Unknown or bad timezone”致命错误;推荐通过DateTimeZone::listIdentifiers()动态获取合法时区名,优先选用稳定主流的Asia/Shanghai(覆盖中国大陆全境),并警惕php.ini配置与代码中date_default_timezone_set()的覆盖关系及CLI/Web环境差异,确保生产环境时区行为一致可靠。

PHP时区设置格式是什么_时区标识符的正确写法汇总【介绍】

PHP 时区设置必须用标准时区标识符(如 Asia/Shanghai),不能用缩写(如 CST)、偏移量(如 +08:00)或自定义字符串。

时区标识符不是任意填的,PHP 只认 IANA 官方数据库里的名字

PHP 的 date_default_timezone_set()DateTimeZone 构造函数只接受 IANA 时区数据库中的有效标识符。填错会直接报 DateTimeZone::__construct(): Unknown or bad timezone 错误。

  • Asia/Shanghai ✅ 正确(中国大陆标准时间)
  • PRC ⚠️ 历史遗留别名,PHP 7.0+ 已弃用,不推荐
  • CST ❌ 错误(CST 有多个含义:美国中部、中国标准、澳大利亚中部)
  • +08:00 ❌ 错误(这是 UTC 偏移,不是时区标识符)
  • China/Beijing ❌ 错误(IANA 中不存在该路径)

如何查到合法且稳定的时区名

别靠记忆或搜索引擎拼凑,用 PHP 自带工具最可靠:

  • 运行 php -r "print_r(DateTimeZone::listIdentifiers());" 查全部(约 400+ 个)
  • 按地区筛选更实用:DateTimeZone::listIdentifiers(DateTimeZone::ASIA)
  • 常见中国大陆相关:Asia/Shanghai(覆盖全境,含港澳台实际也常用)、Asia/Urumqi(新疆等地有时用于本地视图,但非官方时区)
  • 注意:没有 Asia/BeijingAsia/Hong_Kong 是独立条目(Asia/Hong_Kong ✅ 存在;Asia/Macau ✅ 存在)

ini 设置和代码设置混用时的优先级陷阱

date.timezonephp.ini 里设了,不代表代码里调 date_default_timezone_set() 就无效——后者会覆盖前者,且影响所有后续 date()strtotime() 等行为。

  • 如果框架(如 Laravel)或 Composer 包内部调用了 date_default_timezone_set(),你的 php.ini 设置可能被静默覆盖
  • ini_set('date.timezone', '...') 是运行时修改,效果同 date_default_timezone_set(),但不如后者语义清晰
  • CLI 和 Web SAPI 的 php.ini 可能不同,用 phpinfo()ini_get('date.timezone') 实际确认当前生效值

时区名大小写和路径分隔符必须严格匹配

IANA 标识符是大小写敏感的,且必须用正斜杠 / 分隔,不能用反斜杠或下划线。

  • asia/shanghai ❌ 全小写错误
  • Asia\Shanghai ❌ Windows 风格反斜杠
  • Asia_Shanghai ❌ 下划线非法
  • Asia/Shanghai ✅ 唯一正确写法
  • 注意:有些旧文档写成 Asia/Chongqing,它在 PHP 中存在但已软废弃,建议统一用 Asia/Shanghai

真正容易被忽略的是:同一个地理区域可能有多个时区名(比如 Asia/ShanghaiAsia/Chongqing 指向同一历史规则),但 PHP 不保证它们长期等价;生产环境务必锁定一个明确、主流、无歧义的标识符,而不是依赖别名或模糊匹配。

本篇关于《PHP正确时区设置方法与标识符写法》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>