开发效率 · 4 分钟阅读

时间戳差了 1000 倍或 8 小时,应该怎么排查

区分单位错误和时区错误,用固定例子检查接口、数据库和日志。

先确认秒还是毫秒

Unix 时间戳从 UTC 的 1970 年 1 月 1 日零点计时。有的接口使用秒,JavaScript Date 使用毫秒。如果把秒直接传入 Date,通常会得到接近 1970 年的日期;如果把毫秒当秒处理,结果可能远超正常日期范围。

“10 位秒、13 位毫秒”只是当前常见的经验。历史日期和未来日期的长度可能不同,负时间戳也有不同长度。应查看接口约定,并明确选择输入单位。

用固定例子核对时区

时间戳 0 毫秒对应 1970-01-01 00:00:00 UTC,在北京时间显示为 1970-01-01 08:00:00。数值时间戳未变,变化的是显示时区。

可使用 1704067200000 毫秒作为另一个核对样例:它对应 2024-01-01 00:00:00 UTC,也就是北京时间 08:00:00。如果系统显示相差 8 小时,优先检查格式化和反向解析时采用的时区。

反向转换要写明日期的时区

“2024-01-01 08:00:00”本身没有完整说明时刻。它可能是北京、伦敦或浏览器所在地区的墙上时间。本站反向转换要求选择 UTC 或固定 UTC+08:00,避免依赖设备默认设置。

如果业务涉及夏令时,不要把地区时区简单当作固定偏移。应在服务端使用明确的地区时区标识并核对夏令时转换规则。本站固定北京时间输入不承担其他地区的夏令时解析。

保存数据时减少歧义

接口字段可以用 createdAtMs 等命名表明单位,并在文档中提供示例。日志尽量写入带 Z 或时区偏移的 ISO 时间。数据库、API 和展示层分别确认一次单位与时区,通常比在界面上手动加减 8 小时更可靠。