如何在Node.js中获得最准确的时间戳?如何在Node.js中获取microtime?
PS我的Node.js的版本是0.8.4和node-microtime extension不为我工作(上安装崩溃)
如何在Node.js中获得最准确的时间戳?如何在Node.js中获取microtime?
PS我的Node.js的版本是0.8.4和node-microtime extension不为我工作(上安装崩溃)
new Date().getTime()
?这给你一个以毫秒为单位的时间标记,这是JS给你的最准确的时间标记。
更新:如vaughan所述,process.hrtime()
在Node.js中可用 - 它的分辨率是纳秒,因此其分辨率要高得多,但这并不意味着它必须更精确。
PS:只是为了更清晰,process.hrtime()
回报你含在[秒,纳秒]目前高分辨率实时
Node.js的一个元组Array
nanotimer
我写了一个在process.hrtime
函数调用之上的node.js的封装器库/对象。它具有有用的功能,如定时同步和异步任务,以秒,毫秒,微或甚至纳秒为单位指定,并遵循内置javascript定时器的语法以便熟悉。
计时器对象也是分立的,因此您可以拥有尽可能多的代码,每个代码都有自己的setTimeout
或setInterval
进程运行。它们被称为nanotimer。一探究竟!
在Node.js中,“高分辨率时间”可通过process.hrtime
获得。它返回一个数组,其中第一个元素的时间以秒为单位,第二个元素为剩余的纳秒。
要获得当前时间以毫秒,做到以下几点:(感谢itaifrenkel以上的转换指出错误)
var hrTime = process.hrtime()
console.log(hrTime[0] * 1000000 + hrTime[1]/1000)
在现代浏览器中,时间与微秒精度可作为performance.now
。有关文档,请参见https://developer.mozilla.org/en-US/docs/Web/API/Performance/now。
我已经为Node.js实现了基于process.hrtime
的这个函数的实现,如果您只想计算程序中两点之间的时间差,则该函数相对难以使用。见http://npmjs.org/package/performance-now。根据规范,此函数以毫秒为单位报告时间,但它是一个具有亚毫秒精度的浮点数。
在此模块的2.0版中,报告的毫秒数与节点进程启动时间()有关。如果需要类似于Date.now()
的时间戳,则需要将结果添加到结果中。还请注意,您应该重新计算。对于精确测量,Date.now
和process.uptime
都非常不可靠。
要获得以微秒为单位的当前时间,可以使用类似这样的东西。
var loadTimeInMS = Date.now()
var performanceNow = require("performance-now")
console.log((loadTimeInMS + performanceNow()) * 1000)
需要注意的是,要进行基准测试,您可以将先前调用的结果传递给'process.hrtime()'以获取差异。例如'var startTime = process.hrtime();'然后'var diff = process.hrtime(startTime);'。 – 2014-02-28 16:58:41
请将秒转换为微秒时检查时间单位。 console.log(hrTime [0] * 1000000 + hrTime [1]/1000) – itaifrenkel 2014-05-05 16:05:04
感谢您指出这个错误,itaifrenkel!我已更正了转换代码。 – 2014-05-05 16:39:19
有结合它返回Linux上的微秒级精度时间戳系统的gettimeofday()函数, NPM包。搜索 npm gettimeofday
。调用C比process.hrtime()
更快还有https://github.com/wadey/node-microtime:
> var microtime = require('microtime')
> microtime.now()
1297448895297028
为了比Date.now()
更精密的工作,但在浮点数精度毫秒:
function getTimeMSFloat() {
var hrtime = process.hrtime();
return (hrtime[0] * 1000000 + hrtime[1]/1000)/1000;
}
now('milli'); // 120335360.999686
now('micro') ; // 120335360966.583
now('nano') ; // 120335360904333
知道now
是:
const now=(unit)=>{
const hrTime=process.hrtime();
switch (unit) {
case 'milli':return hrTime[0] * 1000 + hrTime[1]/1000000;
case 'micro':return hrTime[0] * 1000000 + hrTime[1]/1000;
case 'nano':return hrTime[0] * 1000000000 + hrTime[1] ;
break;
default:return hrTime[0] * 1000000000 + hrTime[1] ;
}
}
'process.hrtime()'不返回当前时间。 – 2017-07-28 07:43:39
你有哪些Os? – 2017-07-28 10:42:54
重写,以帮助快速理解:
const hrtime = process.hrtime(); // [0] is seconds, [1] is nanoseconds
let nanoSeconds = (hrtime[0] * 1e9) + hrtime[1]; // 1 second is 1e9 nano seconds
console.log('nanoSeconds: ' + nanoSeconds);
//nanoSeconds: 97760957504895
let microSeconds = parseInt(((hrtime[0] * 1e6) + (hrtime[1]) * 1e-3));
console.log('microSeconds: ' + microSeconds);
//microSeconds: 97760957504
let milliSeconds = parseInt(((hrtime[0] * 1e3) + (hrtime[1]) * 1e-6));
console.log('milliSeconds: ' + milliSeconds);
//milliSeconds: 97760957
来源:https://nodejs.org/api/process.html#process_process_hrtime_time
更好?
Number(process.hrtime().join(''))
'Date.now()'请。 – jAndy 2012-07-30 16:35:16
@Esailija小于毫秒的任何东西都会变得不可靠。 – TheZ 2012-07-30 16:36:02
我需要更准确的时间然后简单的时间戳 – NiLL 2012-07-30 16:37:20