必须编辑 php --ini 显示的 “Loaded Configuration File” 路径下的 php.ini,设置 date.timezone = "Asia/Shanghai",重启 Apache 并用代码验证输出 Asia/Shanghai 和北京时间。

确认当前生效的 php.ini 路径
PHP 8.2 不会读取你“以为在用”的那个 php.ini。常见错误是改了 C:\Windows\php.ini 或 XAMPP 的配置,但 phpEnv 或其他环境实际加载的是自己目录下的独立文件。运行 php --ini(CLI)或创建一个 <?php phpinfo(); ?> 页面访问,重点看 “Loaded Configuration File” 这一行——它显示的路径才是你必须编辑的那个。
修改 date.timezone = "Asia/Shanghai"
打开上一步确认的 php.ini,搜索 date.timezone。如果该行被注释(开头是分号),删掉分号;如果整行不存在,在 [Date] 段落里新增一行:
date.timezone = "Asia/Shanghai"
注意:PRC、China/Standard_Time、GMT+8 都不能用——PHP 8.2 已彻底废弃这些写法,设了会触发 Deprecated: date_default_timezone_set(): Timezone ID 'PRC' is invalid 并回退到 UTC。双引号建议保留,避免空格或特殊字符导致解析失败。
重启 Apache(不是重启 phpEnv 界面本身)
phpEnv 默认以 Apache 模块方式运行 PHP,所以只重启 Apache 就够了,不需要动 PHP-FPM。在 phpEnv 控制面板中点击 Restart Apache(不是 Stop → Start,也不是点“PHP Restart”)。不重启的话,phpinfo() 里 date.timezone 值不会更新,所有 date()、new DateTime() 仍按旧时区跑。
立即学习“PHP免费学习笔记(深入)”;
- CLI 场景下(比如执行
php artisan),需关掉当前终端再新开,或手动 kill 掉旧的 CLI 进程 - 如果你同时跑着多个 phpEnv 版本,确保你改的是当前
php --version对应的那个php.ini
验证是否真正生效
别只信配置文件写了什么,要运行代码确认:
<?php
echo date_default_timezone_get(); // 应输出 Asia/Shanghai
echo date('Y-m-d H:i:s'); // 应显示当前北京时间,而非 UTC 时间
?>
如果输出仍是 UTC 或报 Warning,说明:要么改错了文件,要么没重启 Apache,要么用了 PRC 这类非法值——这三个点最容易漏查。



















