JS如何获取精确的时间戳
我们一般通过 Date.now() 来获取时间戳,该时间戳的精度是毫秒,那如果想获取微秒级别的时间戳
浏览器环境
我们可以使用 performance.now() 来获取时间,该 API 具有如下特点
- 返回的时间是基于 time origin 的相对值,即是从 time origin到现在的时间
- 返回的时间单位是毫秒,它的浮点数表示的更加精确的时间,可达到微秒级
- 返回的时间不是高精度的,各个浏览器做了不同的近似处理
可以使用以下方法获取近似的微秒时间戳
const timestamp = performance.timeOrigin * 1000 + performance.now() * 1000;Node.js 环境
可以使用 process.hrtime.bigint() 可以获取纳秒的时间戳,该 API 具有如下特点
- 返回时间的基准是过去的任意时间,则只能用于计算差值,无法直接计算挂钟时间
- 返回时间单位是纳秒
可以使用以下方法获取近似的微秒时间戳
const baseDateNow = BigInt(Date.now()) * 1000;const baseHrtime = process.hrtime.bigint();
// 在其他的一个时间点,例如5秒后setTimeout(() => { const timestamp = baseDateNow + (process.hrtime.bigint() - baseHrtime) / 1000; console.log(timestamp);}, 5000);