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

时间:2011-05-14 15:29:58

标签: javascript time precision time-precision

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

7 个答案:

答案 0 :(得分:62)

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

window.performance.now()

另见:

答案 1 :(得分:10)

以Jeffery的答案为基础,获得绝对时间戳(如OP所希望的那样)代码将是:

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

结果以毫秒为单位,但据报道是一个浮点值" 精确到千分之一毫秒"

答案 2 :(得分:8)

在像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);
}




答案 3 :(得分:5)

没有。您无法在JavaScript层获得纳秒精度。

如果您正在尝试对一些非常快速的操作进行基准测试,请将其置于一个运行它几千次的循环中。

答案 4 :(得分:3)

JavaScript以毫秒为单位记录时间,因此您将无法获得该精度的时间。 smart-aleck答案是“乘以1,000,000”。

答案 5 :(得分:2)

是的!试试优秀的sazze' nano-time

let now = require('nano-time');
now(); // '1476742925219947761' (returns as string due to JS limitation)

答案 6 :(得分:1)

自UNIX时代以来

毫秒,具有微秒分辨率的

performance.timing.navigationStart已被弃用!请改用以下内容:

(performance.now() + performance.timeOrigin)

the specification的相关引用

此规范定义了一个API,该API以亚毫秒级的分辨率提供时间起点和当前时间,因此不受系统时钟偏差或调整的影响。

timeOrigin 属性必须返回代表{em> time的高分辨率时间的DOMHighResTimeStamp Performance对象的相关全局对象的原始时间戳。

时间起源时间戳 时间起源为零的高分辨率时间值。

时间起点 是测量时间的时间值

now() 方法必须返回当前的高分辨率时间

当前高分辨率时间 是从时间原点到当前时间(通常称为“现在”)的高分辨率时间。


请注意,出于安全原因, 实际上并不准确(防止侧通道攻击)

该规范定义了一个提供亚毫秒级时间分辨率的API,该分辨率比DOMTimeStamp公开的先前可用的毫秒级分辨率更准确。但是,即使没有这个新的API,攻击者也可能能够通过重复执行和统计分析来获得高分辨率的估计值。为确保新的API不会显着提高此类攻击的准确性或速度,DOMHighResTimeStamp类型的最低分辨率应不够准确以防止攻击:当前的最低建议分辨率不低于5微秒,并且在必要时应由用户代理设置为更高的级别,以解决由于架构或软件限制或其他考虑因素引起的隐私和安全问题。