同一批订单在 en-US 导出成 3/1/2026,de-DE 变成 1.3.2026,财务按列粘贴后 300 行日期错位。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
new Intl.DateTimeFormat('en-CA', {year:'numeric',month:'2-digit',day:'2-digit'}).format(d)
// 2026-03-01
格式化直接用了默认的日期样式,顺序由 locale 决定。CSV 没有列类型,Excel 打开时又按本地设置再解析一次。两个环节都依赖语言环境,结果不可控。这一点先确认清楚,后面就不用反复试。
「日期格式本地化」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
具体做法是,导出统一用 ISO 8601 固定 yyyy-MM-dd 不受 locale 影响;只在页面展示层做本地化格式;CSV 单元格前加制表符或设为文本 防止 Excel 二次解析;用德语和英语各导一次 逐列比对。
改完照着核一遍,两种语言导出的日期列都是 2026-03-01,粘贴到 Excel 后不再重排。
