唯一可靠方式是修改实际加载的php.ini中date.timezone为asia/shanghai并重启apache;需通过phpinfo()确认loaded configuration file路径,全文搜索修改赋值行而非注释行,禁用prc/gmt+8等非标准写法,最后用脚本验证输出。

改 date.timezone 配置项并重启 Apache,是唯一可靠的方式;其他“快捷方法”要么不生效,要么只在特定版本或路径下偶然起作用。
确认当前实际加载的 php.ini 文件
很多人改了错的 php.ini,因为 XAMPP 里可能有多个:Apache 模块用一个,CLI(命令行)用另一个,甚至不同 PHP 版本还各自带一份。
执行以下代码查看真实路径:
<?php phpinfo(); ?>
在页面中搜索 Loaded Configuration File,拿到那个绝对路径——后面所有修改都只动它。
- 别只凭 XAMPP 控制面板里的“Config → PHP (php.ini)”就开改,那个按钮有时会打开错误版本的文件
- 如果
Loaded Configuration File显示为none,说明 PHP 正在用默认内置配置,此时必须手动指定有效路径并确保 Apache 能读到 - Windows 下常见路径是
C:\xampp\php\php.ini,但如果你装过多个 PHP 版本,C:\xampp\php\php7.4\php.ini这类路径也完全可能被加载
修改 date.timezone 行,注意两处关键位置
XAMPP 的 php.ini 文件里,date.timezone 往往出现不止一次。最常踩的坑是:只改了开头注释掉的那行,却漏掉了后面被 XAMPP 自己追加的覆盖行(比如第 2013 行附近)。
打开你确认无误的 php.ini,全文搜索 date.timezone,你会看到类似这样的两处:
;date.timezone = ... [date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Europe/Berlin
重点改的是第二处——即带明确赋值的那行,把它改成:
date.timezone = Asia/Shanghai
- 不要用
PRC:它已被 PHP 官方废弃,部分新版(如 PHP 8.2+)直接不识别,会 fallback 到 UTC - 不要写
GMT+8或CST:这些不是 IANA 标准时区名,PHP 不认 - 大小写敏感:
asia/shanghai无效,必须是Asia/Shanghai - 改完保存,别忘了关掉所有编辑器再检查一遍是否真写进去了(有些编辑器缓存未刷新)
重启 Apache 后验证是否真正生效
改完不重启 = 白改;重启了没验证 = 不知道有没有白改。
新建一个 test-timezone.php 放进 htdocs,内容如下:
<?php echo 'Current timezone: ' . date_default_timezone_get() . "\n";
echo 'Now: ' . date('Y-m-d H:i:s') . "\n";
?>
浏览器访问 http://localhost/test-timezone.php,看输出:
- 第一行必须是
Asia/Shanghai,不是Europe/Berlin、UTC或空字符串 - 第二行时间应与你本地系统时间一致(误差不超过 1 秒)
- 如果第一行对了但第二行仍差 8 小时,检查系统时间是否本身不准,或 BIOS 时间是否设为 UTC(Windows 双系统常见)
真正麻烦的从来不是改哪一行,而是你根本不知道自己改的是不是那个正在起作用的配置文件——尤其当 XAMPP 更新后自动备份旧 php.ini 并生成新文件时,旧路径还在控制面板里挂着,人却已经跑偏了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











