有没有办法使用 JavaScript 以纳秒为单位获取当前时间?

IT技术 javascript time precision time-precision
2021-03-11 05:45:50

所以,我知道我可以使用 JavaScript 以毫秒为单位获取当前时间。但是,是否有可能以纳秒为单位获取当前时间?

6个回答

使用以下方法在大多数浏览器中实现微秒精度:

window.performance.now()

也可以看看:

'webkit' 前缀在 Chrome 24 周围被删除。 developer.mozilla.org/en-US/docs/Web/API/...
2021-05-05 05:45:50
请注意 window.performance.now() 返回相对于页面导航开始而不是 UNIX 时期的时间。有关当前时间的代码片段,请参阅下面的答案。
2021-05-11 05:45:50
然而,微秒不是纳秒,所以performance.now()在这里没用。
2021-05-16 05:45:50
根据您发布的链接,“performance.now() 方法返回一个 DOMHighResTimeStamp,以毫秒为单位”。毫秒不是纳秒。
2021-05-18 05:45:50
根据您链接的 MDN 站点上的提示,显然浏览器出于安全考虑实际上并没有返回纳秒精度:“[B] 浏览器目前对结果进行了不同程度的舍入。[...] 一些浏览器也可能会稍微随机化时间戳。”
2021-05-21 05:45:50

基于 Jeffery 的回答,要获得绝对时间戳(如 OP 所希望的那样),代码将是:

var TS = window.performance.timing.navigationStart + window.performance.now();

结果以毫秒为单位,但据说是一个浮点值,“精确到千分之一毫秒”。

警告 performance.timing.navigationStart已被弃用。
2021-05-14 05:45:50

在像 Node.js 这样的服务器端环境中,您可以使用以下函数以纳秒为单位获取时间

function getNanoSecTime() {
  var hrTime = process.hrtime();
  return hrTime[0] * 1000000000 + hrTime[1];
}

也以类似的方式获得微秒:

function getMicSecTime() {
  var hrTime = process.hrtime();
  return hrTime[0] * 1000000 + parseInt(hrTime[1] / 1000);
}

我碰巧在 api 中看到了这一点process.hrtime:“这些时间相对于过去的任意时间,与一天中的时间无关,因此不受时钟漂移的影响。主要用途是测量间隔之间的性能”。
2021-04-27 05:45:50
使用 Node 7.4.0 和 7.5.0 时,这不会返回 CURRENT 时间戳。
2021-05-10 05:45:50

不。您不可能在 JavaScript 层获得纳秒级精度。

如果您尝试对某些非常快速的操作进行基准测试,请将其放入一个循环中,使其运行数千次。

@EduardoMelo 例如,页面错误模拟器中的 LRU 替换(我现在正在做的一个项目)。毫秒精度不够好,因为代码运行速度太快,而且我页面上的时间戳每 1k 页左右都有相同的值......
2021-05-03 05:45:50
重新讨论这个问题,基准测试并不是时间精度的唯一用例。有一些算法可能需要它,如果我想在浏览器上运行它,JS 是必需的。
2021-05-07 05:45:50
@evandentremont 微秒比纳秒高三个数量级!
2021-05-10 05:45:50
+1 ...你为什么要这样做?如果它需要那么精确,它可能一开始就不应该是 JavaScript。PS:嘿,mod:删除火焰评论应该保持有效评论完好无损。只是一个想法。
2021-05-12 05:45:50
你知道是删除了所有评论吗?
2021-05-18 05:45:50

是的!试试优秀的 sazze 的纳米时间

let now = require('nano-time');
now(); // '1476742925219947761' (returns as string due to JS limitation)
注意 - 仅用于节点 - 使用process.hrtime()(@TahsinTurkoz),然后从中计算绝对时间。
2021-05-15 05:45:50