ThinkPHP 6.0 不接管 PHP 时区,默认由运行环境决定;需在 public/index.php 首行添加 date_default_timezone_set('Asia/Shanghai') 才生效,config('app.timezone') 对原生时间函数无效。

ThinkPHP 6.0 本身不接管 PHP 的时区设置,默认时区完全由 PHP 运行环境决定。所谓“修改框架默认时区”,实际是确保 PHP 解析时间函数(如 date()、time()、strtotime())时使用 Asia/Shanghai,而不是服务器默认的 UTC 或其他时区。
在入口文件强制设时区(最有效)
这是生产环境最稳妥的做法,不受 php.ini 权限限制,也避免多环境配置不一致:
- 打开
public/index.php - 在第一行(任何代码执行前)添加:
date_default_timezone_set('Asia/Shanghai'); - 保存后立即生效,无需重启 Web 服务
别依赖 config('app.timezone')
这个配置项在 TP6.0 中仅影响日志、缓存等少数内部模块,对 date()、strtotime()、DateTime 等原生时间函数完全无效:
- 即使你在
config/app.php中写了'default_timezone' => 'Asia/Shanghai',date('Y-m-d H:i:s')仍可能输出 UTC 时间 - 验证方式:在控制器中加一行
var_dump(date_default_timezone_get());,看输出是否为Asia/Shanghai
确认当前时区是否生效
部署后务必检查,尤其上线时容易忽略:
- 在任意控制器方法中写:
echo date('Y-m-d H:i:s') . ' | ' . date_default_timezone_get(); - 本地开发正确、线上差 8 小时?大概率是生产服务器没设时区,或设成了
UTC - 若输出不是
Asia/Shanghai,说明入口文件未执行或被覆盖,需回查
补充说明:Date 门面不适用于 TP6.0
think\facade\Date 是 TP6.1+ 才引入的,TP6.0 版本直接 use 会报 Class not found:
- 运行
php think version确认版本,输出为v6.0.x就不能用Date::now() - 替代方案:封装一个简单助手函数,例如:
function now() { return date('Y-m-d H:i:s'); }
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











