You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:05:16