因此,我知道使用 JavaScript 可以得到以毫秒为单位的当前时间。但是,有没有可能用纳秒来代替现在的时间呢?
不,在 JavaScript 层你不可能获得纳秒级的精度。
如果您试图对一些非常快速的操作进行基准测试,那么将其放入一个运行几千次的循环中。
JavaScript 以毫秒为单位记录时间,因此无法达到这种精度。自作聪明的答案是“乘以1,000,000”。
在大多数浏览器中,使用以下技术可以达到微秒级的精确度:
window.performance.now()
参见:
在 Jeffery 的回答的基础上,为了得到一个绝对的时间戳(如 OP 所希望的) ,代码应该是:
var TS = window.performance.timing.navigationStart + window.performance.now();
Result 以毫秒为单位,但据报道是一个浮点值“ 精确到千分之一毫秒”。
在像 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); }
是的! 试试优秀的 Sazze 的 纳米时间 强 >
let now = require('nano-time'); now(); // '1476742925219947761' (returns as string due to JS limitation)
performance.timing.navigationStart已经是 不赞成了! 请使用以下代码:
performance.timing.navigationStart
(performance.now() + performance.timeOrigin)
这个规范定义了一个 API,它提供了时间起源和亚毫秒分辨率的当前时间,这样它就不会受到系统时钟偏差或调整的影响。 < em > timeOrigin 属性 必须的返回一个 DOMHighResTimeStamp,表示 Performance对象的 相关的全局对象的 时间起点时间戳的高分辨率时间。 时间起源时间戳是 时间起源为零的高分辨率时间值。 时间来源是用来测量时间的时间值 < em > now() 方法 必须的返回 当前高分辨率时间。 当前高分辨率时间是从时间起点到现在的高分辨率时间(通常称为“现在”)。
这个规范定义了一个 API,它提供了时间起源和亚毫秒分辨率的当前时间,这样它就不会受到系统时钟偏差或调整的影响。
< em > timeOrigin 属性 必须的返回一个 DOMHighResTimeStamp,表示 Performance对象的 相关的全局对象的 时间起点时间戳的高分辨率时间。
timeOrigin
DOMHighResTimeStamp
Performance
时间起源时间戳是 时间起源为零的高分辨率时间值。
时间来源是用来测量时间的时间值
< em > now() 方法 必须的返回 当前高分辨率时间。
now()
当前高分辨率时间是从时间起点到现在的高分辨率时间(通常称为“现在”)。
这个规范定义了一个提供亚毫秒时间分辨率的 API,它比 DOMTimeStamp公开的以前可用的毫秒分辨率更精确。然而,即使没有这个新的 API,攻击者也可以通过重复执行和统计分析获得高分辨率的估计值。为了确保新的 API 不会显著提高此类攻击的准确性或速度,DOMHighResTimeStamp类型的最低分辨率应该不够准确,以防止攻击: 当前推荐的最小分辨率不小于5微秒,并且在必要时,应该由用户代理设置更高的分辨率,以解决由于架构或软件限制或其他考虑而引起的隐私和安全问题。
DOMTimeStamp