前阵子帮人看个线上bug,库里记的下单时间是昨晚11点,用户前台却显示成"今天上午7点",客服白白挨骂。追到底,是有人图省事直接拿服务器本地时间当UTC写库,展示层又按用户时区做了一次+8,凭空多挪了8小时。
这类坑最磨人的地方是平时不报错,只有跨时区或卡在午夜交界才露馅。夏令时更烦,同一个America/New_York一年偏移量要变两次,写死加减固定小时数,碰到DST切换那周准翻车。我还见过用字符串存"2026-03-05 10:00"、再把Date对象和裸时间戳混着加减的,跨时区一算直接乱套。
我的做法是后端只落UTC的timestamp,展示交给前端按Intl.DateTimeFormat按用户时区渲染。从某种角度看时间处理就一条铁律:别信任何"看起来"是本地的时间,落库的都得是明确带时区语义的值。你们踩过这坑么,具体是哪个环节先炸的?