PHP date()函数显示昨日日期问题求助(XAMPP离线测试环境)
解决PHP date()显示日期与系统不符的问题
这问题我之前帮朋友排查过,大概率是时区配置错误导致的——PHP默认使用UTC时区,如果你所在时区比UTC早(比如东八区,UTC+8),当系统时间还没到UTC当天的0点时,PHP的date()函数就会输出前一天的日期,但时间戳是基于UTC的绝对时间,所以本身是准确的。下面是具体的修复步骤:
1. 临时修复(单脚本生效)
如果只想在当前PHP文件里修正,直接在脚本开头加上时区设置:
date_default_timezone_set('Asia/Shanghai'); // 替换成你所在的时区,比如Asia/Tokyo、Europe/London等
添加后再调用date(),应该就能和系统日期一致了。
2. 全局永久修复(所有PHP脚本生效)
要让所有项目都生效,得修改PHP的配置文件:
- 打开XAMPP控制面板,找到Apache模块旁的
Config按钮,选择PHP (php.ini)打开配置文件。 - 在文件里搜索
date.timezone,找到类似这样的行:
;date.timezone =
- 去掉前面的分号注释,设置成你的目标时区,比如:
date.timezone = Asia/Shanghai
- 保存文件后,重启XAMPP里的Apache服务,配置就会生效。
3. 验证修复是否成功
可以写个简单的测试脚本验证结果:
<?php echo "当前时间戳:" . time() . "<br>"; echo "当前日期:" . date('Y-m-d H:i:s') . "<br>"; echo "当前时区:" . date_default_timezone_get(); ?>
运行后查看日期是否和系统日期一致,时区是否是你设置的选项。
额外提示:数据库时区同步
如果修复PHP后,提取今日数据的查询还是为空,还要检查数据库的时区设置,以MySQL为例:
-- 查看当前时区 SELECT @@global.time_zone, @@session.time_zone; -- 临时设置时区(重启数据库后失效) SET GLOBAL time_zone = '+8:00'; SET SESSION time_zone = '+8:00';
要是想永久设置MySQL时区,需要修改my.ini(Windows)或my.cnf(Linux)文件,添加或修改:
default-time-zone = '+8:00'
修改后重启MySQL服务即可。
内容的提问来源于stack exchange,提问作者user8355629
相关产品推荐
相关产品推荐

