客服后台看到的用户消息时间是 06:12,用户说自己是下午两点多发的话,差整八小时,按时间排序也全乱了。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,入库时存的是 UTC 时间戳,展示时按服务器时区格式化,服务器本身跑在 UTC,等于原样输出。前端又把这个字符串当本地时间解析了一遍,偏移被放大。

碰到「消息时间 UTC 偏移」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

$ts = get_gmt_from_date($row->created_at);
echo wp_date('Y-m-d H:i', strtotime($ts . ' UTC'), wp_timezone());

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,存储统一用 UTC,展示统一传站点时区格式化;接口输出带偏移量的标准时间串,别给裸字符串;排序在服务端按时间戳做,别按格式化后的字符串排。

最后用这个标准收尾,同一条消息在后台显示 14:12,和用户手机上的时间对得上。

作者 9823189