为何JavaScript的toLocaleString方法会导致时间小时数偏差?
解决toLocaleString转换时间戳的时区偏差问题
你的问题根源在于toLocaleString的时区默认行为:
- 原时间戳
2023-04-26T12:22:22.985+00:00是UTC标准时间 toLocaleString("fr-FR")默认使用运行环境的本地时区(法国夏令时为UTC+2),所以会把UTC时间转换为本地时间,导致显示比原时间快2小时
解决方案
1. 强制按UTC时区显示
如果需要和原时间戳的UTC时间完全一致,给toLocaleString添加timeZone参数指定为UTC:
console.log(new Date(tData).toLocaleString("fr-FR", { timeZone: "UTC" }) + " --- " + tData)
执行后输出会变为:
26/04/2023 12:22:22 --- 2023-04-26T12:22:22.985+00:00
2. 确认时区需求
如果你的业务逻辑就是要显示用户本地时区的时间,那当前的转换结果是符合预期的(法国夏令时确实比UTC快2小时)。但如果API返回的时间本应对应用户本地时区而非UTC,需要检查API返回的时间格式是否正确,是否应该携带对应时区的偏移量。
内容的提问来源于stack exchange,提问作者NoahHeraud
相关产品推荐
相关产品推荐

