2012-07-30 23 views

回答

60

new Date().getTime()?这给你一个以毫秒为单位的时间标记,这是JS给你的最准确的时间标记。

更新:如vaughan所述,process.hrtime()在Node.js中可用 - 它的分辨率是纳秒,因此其分辨率要高得多,但这并不意味着它必须更精确。

PS:只是为了更清晰,process.hrtime()回报你含在[秒,纳秒]目前高分辨率实时

+67

'Date.now()'请。 – jAndy 2012-07-30 16:35:16

+1

@Esailija小于毫秒的任何东西都会变得不可靠。 – TheZ 2012-07-30 16:36:02

+0

我需要更准确的时间然后简单的时间戳 – NiLL 2012-07-30 16:37:20

5

Node.js的一个元组Array nanotimer

我写了一个在process.hrtime函数调用之上的node.js的封装器库/对象。它具有有用的功能,如定时同步和异步任务,以秒,毫秒,微或甚至纳秒为单位指定,并遵循内置javascript定时器的语法以便熟悉。

计时器对象也是分立的,因此您可以拥有尽可能多的代码,每个代码都有自己的setTimeoutsetInterval进程运行。它们被称为nanotimer。一探究竟!

142

在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.nowprocess.uptime都非常不可靠。

要获得以微秒为单位的当前时间,可以使用类似这样的东西。

var loadTimeInMS = Date.now() 
var performanceNow = require("performance-now") 
console.log((loadTimeInMS + performanceNow()) * 1000) 

参见:Does JavaScript provide a high resolution timer?

+15

需要注意的是,要进行基准测试,您可以将先前调用的结果传递给'process.hrtime()'以获取差异。例如'var startTime = process.hrtime();'然后'var diff = process.hrtime(startTime);'。 – 2014-02-28 16:58:41

+4

请将秒转换为微秒时检查时间单位。 console.log(hrTime [0] * 1000000 + hrTime [1]/1000) – itaifrenkel 2014-05-05 16:05:04

+0

感谢您指出这个错误,itaifrenkel!我已更正了转换代码。 – 2014-05-05 16:39:19

0

有结合它返回Linux上的微秒级精度时间戳系统的gettimeofday()函数, NPM包。搜索 npm gettimeofday。调用C比process.hrtime()

4

为了比Date.now()更精密的工作,但在浮点数精度毫秒:

function getTimeMSFloat() { 
    var hrtime = process.hrtime(); 
    return (hrtime[0] * 1000000 + hrtime[1]/1000)/1000; 
} 
11
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] ; 
    } 

} 
+4

'process.hrtime()'不返回当前时间。 – 2017-07-28 07:43:39

+0

你有哪些Os? – 2017-07-28 10:42:54

0

重写,以帮助快速理解:

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

0

更好?

Number(process.hrtime().join(''))