new Date('2026-03-02T04:10:00Z').toLocaleDateString('en-US', {timeZone:'America/Los_Angeles'})
// 3/1/2026
洛杉矶用户在当地 3 月 1 日 20:10 下单,订单页显示 2026-03-02,客服按日期查单查不到。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:格式化用的是服务器默认时区 UTC,用户本地时间没有参与计算。订单创建时间本身带时区,展示时被转成了 UTC 再截断日期。前端也没有拿到用户时区。
「用户时区格式化」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
处理上按这个顺序:接口返回带偏移的 ISO 时间 不要只给日期字符串;前端按浏览器时区格式化 后端不截断;需要按用户时区统计时 把时区随请求传上来;用洛杉矶和东京两个时区各下一单 对比显示日期。
确认没问题再收工,洛杉矶用户看到的订单日期是 3/1/2026,东京用户看到的是 3/2/2026。
