首页| 版块| 我的| 发帖| 消息
主题:关于global.php时区设置和date()函数、gmdate()函数 [电脑版]
zhangjingyu发表于 2026-08-09 19:31
有时候,在格式化时间的时候发现,显示的并不是北京时间,而是0区的格林威治时间。这时候,通常要加一行指定时区的代码:date_default_timezone_set('Asia/Shanghai');但这行代码放的位置有讲究:如果有调用global.php文件的代码,一定要放在它的后面。

global.php文件:
function_exists('date_default_timezone_set') && date_default_timezone_set('Etc/GMT+0');
“加了8个小时后可以了。那为什么之前直接加这一行就可以:date_default_timezone_set('Asia/Shanghai');今天这个文件不对呢”(引用内容)好问题!关键在于 global.php 里面可能已经设置了时区,而且设置的是 UTC 或者 Europe/London 等,date_default_timezone_set('Asia/Shanghai') 被 global.php 里的设置覆盖了!

原因分析:
PHP 中 date_default_timezone_set() 的行为是:
后调用的覆盖先调用的
如果在代码后面又调用了 date_default_timezone_set(),会重新设置时区

所以,建议:
在 require_once('../global.php') 之后,立即添加:
date_default_timezone_set('Asia/Shanghai');
这样就能确保最终使用的是北京时间,不会被 global.php 覆盖。
“你的文件执行流程:
1. date_default_timezone_set('Asia/Shanghai');  // 设置北京时间
2. require_once('../global.php');              // 引入 global.php
   └─ global.php 内部:date_default_timezone_set('UTC'); // 覆盖为 UTC
3. 显示时间时用的是 UTC,差8小时 ❌

修正后:
1. require_once('../global.php');              // 引入 global.php
   └─ global.php 内部:date_default_timezone_set('UTC');
2. date_default_timezone_set('Asia/Shanghai'); // 重新设置北京时间,覆盖 UTC
3. 显示时间时用的是北京时间 ✅”(引用内容)
回帖(3):
3楼:gmdate() 的本质
gmdate() 不是"绝对的日期/时间",而是 "始终按 UTC 时区格 ..(zhangjingyu)
2楼:“前几天,我们讨论过时区和date()格式化日期的问题,结论是:
date('Y-m-d H:i:s& ..(zhangjingyu)
1楼:时区小知识:
时区说明Etc/GMT+0UTC+0(格林威治标准时间)Asia/Shanghai北京时间(UTC+8) ..(zhangjingyu)

全部回帖(3)» | 最新回帖
收藏本主题 | 发表新主题