php时区需在php.ini中设date.timezone="asia/shanghai"并重启服务,或用date_default_timezone_set("asia/shanghai")临时设置,严禁使用gmt+8等非法值。

phpEnv 是 Windows 下常见的集成环境(类似 XAMPP、WAMP),它默认不显式设置 date.timezone,导致 date()、new DateTime() 等函数抛 Warning 或返回错误时间——这不是代码写错了,是环境没配好。
确认你用的是哪个 php.ini
phpEnv 通常有多个 PHP 版本共存,每个版本对应独立的配置文件。别直接改错位置:
- 新建一个
info.php,内容为<?php phpinfo(); ?>,浏览器访问后找 Loaded Configuration File 这一行,路径类似C:/phpEnv/php/php-8.3.0/etc/php.ini - 注意:phpEnv 的
php.ini一般在php/{版本号}/etc/下,不是php/{版本号}/根目录 - 如果显示 “no value”,说明没加载到任何
php.ini,需检查 phpEnv 面板里是否启用了该 PHP 版本,或手动指定配置路径
修改 date.timezone 必须取消注释并填 IANA 时区名
打开上一步确认的 php.ini,搜索 date.timezone:
- 找到这行:
;date.timezone =(前面有分号,是注释状态) - 删掉分号,改成:
date.timezone = "Asia/Shanghai"(必须用双引号,且值必须是 IANA 时区名) - 严禁写成:
date.timezone = GMT+8、date.timezone = CST、date.timezone = China—— PHP 会静默忽略,等同于没设 - PHP 8.5 起,空值或非法值会导致
Warning: date(): It is not safe to rely on the system's timezone settings,且new DateTime()可能返回false
改完必须重启 phpEnv 的 Web 服务,不是“重载”
phpEnv 面板里点「重启 Apache」或「重启 Nginx」按钮,本质是杀进程再拉起:
- 仅点「重载配置」或刷新页面无效——
php-fpm或模块进程不会重新读取php.ini - 如果用的是 Apache 模块模式,重启 Apache 即可;如果用的是 Nginx + php-fpm,则需同时重启 Nginx 和 php-fpm 进程(phpEnv 面板通常提供一键操作)
- 验证是否生效:在
info.php页面搜索date.timezone,看右侧值是否为Asia/Shanghai;再执行echo date('Y-m-d H:i:s');,看输出是否符合本地当前时间
最容易被忽略的是:phpEnv 多版本共存时,你改了 A 版本的 php.ini,但项目实际跑在 B 版本上——务必以 phpinfo() 显示的 Loaded Configuration File 为准,而不是凭印象去改。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











