有时候,在格式化时间的时候发现,显示的并不是北京时间,而是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. 显示时间时用的是北京时间 ✅”(引用内容)

