后台列表显示 14:20 下单,导出的 Excel 里是 06:20,同一天的数据跨到前一天,对账时差了 137 单。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,PHP 进程时区是 UTC,导出时用 date 直接格式化时间戳,没有换成站点时区。数据库里存的是 UTC,展示层和导出层各转了一次或都没转。

「导出时区差八小时」这类改动最怕改一半,回滚脚本先准备好,再动生产。改完顺手把文档补一句,省得下次自己重新推一遍。

date_default_timezone_set('Asia/Shanghai');
$row['created_at'] = get_date_from_gmt($raw, 'Y-m-d H:i');

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

具体做法是,导出前统一用 wp_timezone 或 date_default_timezone_set 设成 Asia/Shanghai;时间列在 SQL 里就转好 不要留给前端;抽 5 条记录和后台列表逐条对时间。

最后用这个标准收尾,导出时间和后台列表逐条一致,跨零点那批不再落到前一天。

作者 9823189