2012-07-30 4 views

답변

60

new Date().getTime() 나를 위해 작동하지 않는 이유는 무엇입니까? 이렇게하면 밀리 초 단위의 타임 스탬프가 제공되므로 JS가 제공하는 정확도가 가장 높습니다.

업데이트 : vaughan에 명시된 바와 같이 process.hrtime()은 Node.js에서 사용할 수 있습니다. 해상도는 나노초이며 따라서 훨씬 더 높습니다. 더 정확하게 말하면되지는 않습니다.

추신 : 그냥 process.hrtime() 반환 당신에게 [초, 나노초]에서 현재 고해상도 실시간

+67

'Date.now()'하십시오. – jAndy

+1

@Esailija 밀리 초보다 작 으면 악명이 떨어집니다. – TheZ

+0

간단한 시간 기록보다 정확한 시간이 필요합니다. – NiLL

5

Node.js를 포함하는 튜플 Array 명확하게하기 위해 nanotimer

내가 쓴 wrapper 라이브러리/process.hrtime 함수 호출 위에 node.js에 대한 객체. Timing 동기식 및 비동기식 작업과 같은 유용한 기능을 갖추고 있으며 초 단위, 밀리 초 단위 또는 초 단위로 지정되며 javascript 내장 타이머의 구문을 따르면 익숙합니다.

타이머 개체도 개별적이므로 원하는만큼 많이 가질 수 있습니다. 각각은 자신의 setTimeout 또는 setInterval 프로세스가 실행 중입니다.

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을 참조하십시오.

process.hrtime을 기반으로 Node.js에 대해이 기능을 구현했습니다.이 기능은 프로그램의 두 지점 사이의 시간 차이 만 계산하려는 경우 사용하기가 상대적으로 어렵습니다. http://npmjs.org/package/performance-now을 참조하십시오. 스펙에 따르면,이 함수는 밀리 초 단위로 시간을보고하지만 밀리 초 단위의 정밀도를 가진 float입니다.

이 모듈의 버전 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()'에 전달하여 diff를 얻을 수 있다는 것을 알아야한다. 예 : 'var startTime = process.hrtime();'그리고 나서'var diff = process.hrtime (startTime);'을 호출한다. –

+4

초를 마이크로 초로 변환 할 때 시간 단위를 확인하십시오. console.log (hrTime [0] * 1000000 + hrTime [1]/1000) – itaifrenkel

+0

이 오류를 지적 해 주셔서 감사합니다, itaifrenkel! 전환 코드를 수정했습니다. –

0

리눅스에서 마이크로 정밀 타임 스탬프를 반환하는 시스템은 gettimeofday() 함수, 에 결합 NPM 패키지가 있습니다. npm gettimeofday으로 검색하십시오. C를 호출하면 process.hrtime()

4

Date.now()보다 더 정밀하게하려면,하지만 float 정밀도로 밀리 세컨드로 :

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()'은 현재 시간을 반환하지 않습니다. –

+0

당신은 가지고 있습니까? –

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

관련 문제