为什么当前毫秒通常是 13 位?
当前日期距离 Unix 纪元约有 1.7 万亿毫秒,因此现代正数通常有 13 位。位数会随日期变化:接近 1970 年的值更短,负数带符号,未来数值会继续增长,所以不能把“13 位”当作唯一验证条件。
JavaScript 与精度
Date.now() 返回来自设备时钟的整数毫秒。把该值乘以 1,000 或 1,000,000,可以分别表达微秒或纳秒单位,但不会产生新的计时精度。需要真实亚毫秒测量的系统应使用合适的高精度时钟,并明确它与 Unix 纪元之间的关系。
存储与接口注意事项
在数据库或 API 中,应同时记录字段单位。秒值写入毫秒字段会落在 1970 年附近,毫秒值写入秒字段则可能溢出或得到遥远未来日期。JavaScript 普通 Number 也有安全整数上限;处理 16 位或 19 位值时,应避免在换算前发生舍入。
具体怎么使用
当接口或数据库字段注明使用毫秒时,复制毫秒行。秒行把同一个设备读数除以 1,000;微秒和纳秒行只是换算单位,并不是独立的高精度测量。
输入与输出示例
| 输入或设置 | 预期结果 |
|---|---|
1700000000 · s | 1700000000000 · ms |
1700000000000 · ms | 1700000000000000 · µs |
1700000000000 · ms | 1700000000000000000 · ns |
使用结果前的检查
设备时钟不准,当前数值也会不准,本页不会通过外部授时服务校准设备。已有存储数值请到时间戳转日期并选择毫秒。程序运行耗时应使用单调时钟,因为系统校时可能改变日历时间。