Node.js process.hrtime()输出时间偏差五年的问题求助
关于process.hrtime()日期偏差的问题解答
你误解了process.hrtime()的用途——它返回的不是Unix时间戳,而是系统启动以来的时间间隔,所以第一个元素是系统启动后的累计秒数,不是从1970年1月1日开始的时间戳,这就是你看到日期对应到2017年的原因。
正确用法说明
process.hrtime()的设计目的是高精度测量时间间隔,而非获取绝对时间:
- 计算操作耗时:传入之前记录的hrtime结果,得到两次调用的时间差
// 记录起始时间 const start = process.hrtime(); // 执行需要计时的操作 doSomething(); // 计算耗时 const [sec, nanosec] = process.hrtime(start); console.log(`操作耗时:${sec}秒 ${nanosec}纳秒`);
- 如果需要获取微秒级的绝对时间戳,需要结合
Date.now()(Unix毫秒级时间戳)和process.hrtime()的纳秒部分:
const unixMs = Date.now(); const [, nanosec] = process.hrtime(); // 转换为微秒级时间戳 const microTimestamp = unixMs * 1000 + Math.floor(nanosec / 1000); console.log(microTimestamp);
- Node.js v10+也支持
process.hrtime.bigint(),可以直接获取纳秒级的相对时间,结合初始时刻的Unix时间戳来计算当前高精度绝对时间:
// 记录初始基准 const initialUnixMs = Date.now(); const initialHrtimeNs = process.hrtime.bigint(); // 后续获取当前微秒级时间戳 const currentHrtimeNs = process.hrtime.bigint(); const elapsedNs = currentHrtimeNs - initialHrtimeNs; const currentMicroTimestamp = initialUnixMs * 1000 + Number(elapsedNs) / 1000;
总结
process.hrtime()是用来做高精度时间间隔测量的,不是用来获取当前绝对时间的,直接把它返回的秒数当成Unix时间戳转换日期,自然会得到和实际时间完全不符的结果。
内容的提问来源于stack exchange,提问作者fritz
相关产品推荐
相关产品推荐

