Jak uzyskać mikrotime w węźle.js?

Jak mogę uzyskać najdokładniejszy znacznik czasu w Node.js?

Ps moja wersja Node.js wynosi 0,8.X i rozszerzenie node-microtime nie działa dla mnie (crash przy instalacji)

Author: Steven Vascellaro, 2012-07-30

9 answers

new Date().getTime()? Daje to znacznik czasu w milisekundach, który jest najdokładniejszy, jaki da ci JS.

Update: jak stwierdził vaughan, process.hrtime() jest dostępny w Node.js-jego rozdzielczoĹ "Ä ‡ to nanosekundy, a wiÄ ™ c znacznie wyĺźsza, nie oznacza to rĂłwnieĹź, Ĺźe musi byÄ ‡ dokĹ' adniejsza.

PS.: Dla jasności, process.hrtime() zwraca krotkę Array zawierającą aktualny czas rzeczywisty w wysokiej rozdzielczości w [sekundy, nanosekundy]

 66
Author: Niet the Dark Absol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-28 18:16:27

In Node.js, "czas wysokiej rozdzielczości" jest udostępniany poprzez process.hrtime. Zwraca tablicę z pierwszym elementem czas w sekundach, a drugim elementem Pozostałe nanosekundy.

Aby uzyskać bieżący czas w mikrosekundach, wykonaj następujące czynności:

var hrTime = process.hrtime()
console.log(hrTime[0] * 1000000 + hrTime[1] / 1000)

(podziękowania dla itaifrenkel za wskazanie błędu w konwersji powyżej.)

W nowoczesnych przeglądarkach czas z mikrosekundową precyzją jest dostępny jako performance.now. Zobacz też https://developer.mozilla.org/en-US/docs/Web/API/Performance/now do dokumentacji.

Wykonałem implementację tej funkcji dla Node.js, oparty na process.hrtime, który jest stosunkowo trudny w użyciu, jeśli chcesz obliczyć różnicę czasu między dwoma punktami w programie. Zobacz http://npmjs.org/package/performance-now . Zgodnie ze specyfikacją ta funkcja raportuje czas w milisekundach, ale jest to zmiennoprzecinkowa z dokładnością poniżej milisekundy.

W wersji 2.0 z ten moduł, raportowane milisekundy są względne do momentu rozpoczęcia procesu węzła (Date.now() - (process.uptime() * 1000)). Musisz dodać to do wyniku, jeśli chcesz znacznik czasu podobny do Date.now(). Należy również pamiętać, że należy przeliczać Date.now() - (process.uptime() * 1000). Zarówno Date.now, jak i process.uptime są wysoce zawodne do precyzyjnych pomiarów.

Aby uzyskać bieżący czas w mikrosekundach, możesz użyć czegoś takiego.

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

Zobacz także: czy JavaScript zapewnia timer o wysokiej rozdzielczości?

 145
Author: Myrne Stol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:35
now('milli'); //  120335360.999686
now('micro') ; // 120335360966.583
now('nano') ; //  120335360904333

Wiadomo, że now jest:

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];

    default:
      return hrTime[0] * 1000000000 + hrTime[1];
  }

};
 12
Author: Abdennour TOUMI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-28 09:00:07

Jest też https://github.com/wadey/node-microtime :

> var microtime = require('microtime')
> microtime.now()
1297448895297028
 6
Author: mikemaccana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-29 16:40:27

Węzeł.js nanotimer

Napisałem bibliotekę/obiekt wrappera dla node.js na szczycie wywołania funkcji process.hrtime. Ma przydatne funkcje, takie jak synchroniczne i asynchroniczne zadania synchroniczne, określone w sekundach, milisekundach, mikro, a nawet nano, i postępuje zgodnie ze składnią wbudowanego timera javascript, aby być znanym.

Obiekty timera są również dyskretne, więc możesz mieć tyle, ile chcesz, każdy z własnym procesem setTimeout lub setInterval.

Nazywa się nanotimer . Zobacz!

 5
Author: krb686,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-12 19:23:53

Do pracy z większą precyzją niż Date.now(), ale z milisekundami w precyzji float:

function getTimeMSFloat() {
    var hrtime = process.hrtime();
    return ( hrtime[0] * 1000000 + hrtime[1] / 1000 ) / 1000;
}
 3
Author: Ross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-08 15:08:52

Istnieją pakiety npm, które wiążą się z funkcją gettimeofday() systemu, który zwraca mikrosekundowy znacznik czasu precyzji w Linuksie. Szukaj npm gettimeofday. Wywołanie C jest szybsze niż process.hrtime()

 0
Author: Andras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-10 23:22:26

Przepisanie, aby pomóc w szybkim zrozumieniu:

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

Źródło: https://nodejs.org/api/process.html#process_process_hrtime_time

 0
Author: Manohar Reddy Poreddy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-28 04:56:31

Lepiej?

Number(process.hrtime().join(''))
 0
Author: infinito84,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-27 16:34:52