thinkphp 6 + php 7.4 时区需双重设置:一是在 config/app.php 中配置 'default_timezone' => 'asia/shanghai'(仅影响框架内少数方法),二是在 public/index.php 顶部调用 date_default_timezone_set('asia/shanghai')(决定 php 原生时间函数行为),并确保 cli 与 web 环境 php.ini 的 date.timezone 一致。

ThinkPHP 7.4 并不存在——当前最新稳定版 ThinkPHP 是 6.x(如 v6.3 或 v6.4),而 PHP 7.4 是一个已停止安全支持的旧版 PHP 运行环境。你实际使用的应是 ThinkPHP 6 + PHP 7.4 组合。在 TP6 中,时区配置不通过“config 获取”来动态生效,而是由两部分协同作用:
config/app.php 中的 default_timezone 配置
该配置项仅影响框架内少数封装方法(如 think\facade\Time::now()、Time::today()),不改变 PHP 原生时间函数行为。
确保 config/app.php 中存在且正确:
'default_timezone' => 'Asia/Shanghai',- 这个值不会自动调用
date_default_timezone_set() - 它只被框架内部有限几个类读取,比如
Time门面或日志格式化器中的某些选项
真正起效的是 date_default_timezone_set() 调用
PHP 时间函数(date()、strtotime()、time() 等)完全依赖 PHP 运行时默认时区,这个必须显式设置:
- 在
public/index.php最顶部(require框架入口前)加一行:date_default_timezone_set('Asia/Shanghai'); - 删掉任何其他地方的重复调用(如
app/common.php、中间件、BaseController 构造函数) - 调用后可用
date_default_timezone_get()验证是否生效
PHP 7.4 环境下需额外注意
PHP 7.4 对时区更严格:未设置时区会触发 E_WARNING,且默认回退到 UTC(不是系统本地时区)。
- 检查 CLI 和 Web 环境是否用了同一份 php.ini:
php --ini(CLI) vsphpinfo()(Web) - 若不能改 php.ini,务必在入口文件中设置;若能改,建议同步配置:
date.timezone = "Asia/Shanghai",然后重启 PHP-FPM/Nginx - 不要用
"PRC"或"GMT+8",只认标准 IANA 时区名,如"Asia/Shanghai"
验证是否统一成功
写个简单测试脚本,确认三者一致:
-
echo date_default_timezone_get();→ 应输出Asia/Shanghai -
echo date('Y-m-d H:i:s e');→ 末尾应显示e为Asia/Shanghai - 查数据库字段(如
create_time)与 PHP 输出时间是否同为东八区,无 8 小时偏差
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











