Cómo obtener un microtiempo en el nodo.js?


¿Cómo puedo obtener la marca de tiempo más precisa en el nodo.js?

Ps Mi versión de Node.js es 0.8.X y el nodo-microtime extensión no funciona para mí (accidente en la instalación)

Author: Steven Vascellaro, 2012-07-30

9 answers

new Date().getTime()? Esto le da una marca de tiempo en milisegundos, que es la más precisa que JS le dará.

Actualización: Como indica vaughan, process.hrtime() está disponible dentro del nodo.js - su resolución son nanosegundos y por lo tanto su mucho más alto, también esto no significa que tiene que ser más exacto.

PS.: Para ser más claro, process.hrtime() te devuelve una tupla Array que contiene el tiempo real de alta resolución actual en [segundos, nanosegundos]

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-28 18:16:27

En el nodo.js, "tiempo de alta resolución" está disponible a través de process.hrtime. Devuelve una matriz con el primer elemento el tiempo en segundos, y el segundo elemento los nanosegundos restantes.

Para obtener la hora actual en microsegundos, haga lo siguiente:

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

(Gracias a itaifrenkel por señalar un error en la conversión anterior.)

En los navegadores modernos, el tiempo con precisión de microsegundos está disponible como performance.now. Ver https://developer.mozilla.org/en-US/docs/Web/API/Performance/now para la documentación.

He hecho una implementación de esta función para Node.js, basado en process.hrtime, que es relativamente difícil de usar si solo desea calcular el diferencial de tiempo entre dos puntos en un programa. Véase http://npmjs.org/package/performance-now . Según la especificación, esta función informa el tiempo en milisegundos, pero es un flotador con una precisión de sub-milisegundos.

En la versión 2.0 de este módulo, los milisegundos reportados son relativos a cuando se inició el proceso de nodo (Date.now() - (process.uptime() * 1000)). Necesita agregar eso al resultado si desea una marca de tiempo similar a Date.now(). También tenga en cuenta que debe volver a calcular Date.now() - (process.uptime() * 1000). Tanto Date.now como process.uptime son altamente poco fiables para mediciones precisas.

Para obtener la hora actual en microsegundos, puede usar algo como esto.

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

Véase también: ¿Proporciona JavaScript un temporizador de alta resolución?

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:35
now('milli'); //  120335360.999686
now('micro') ; // 120335360966.583
now('nano') ; //  120335360904333

Conocido que now es:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-28 09:00:07

También Hay 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-29 16:40:27

Nodo.js nanotimer

Escribí una librería/objeto wrapper para node.js encima de la llamada a la función process.hrtime. Tiene funciones útiles, como la sincronización de tareas síncronas y asíncronas, especificadas en segundos, milisegundos, micro o incluso nano, y sigue la sintaxis del temporizador javascript incorporado para ser familiar.

Los objetos de temporizador también son discretos, por lo que puede tener tantos como desee, cada uno con su propio proceso setTimeout o setInterval en ejecución.

Se llama nanotimero . ¡Mira esto!

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-12 19:23:53

Para trabajar con más precisión que Date.now(), pero con milisegundos en la precisión del flotador:

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-08 15:08:52

Hay paquetes npm que enlazan a la función gettimeofday() del sistema, que devuelve una marca de tiempo de precisión de microsegundos en Linux. Buscar por npm gettimeofday. Llamar a C es más rápido que 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-10 23:22:26

Una reescritura para ayudar a la comprensión rápida:

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

Fuente: 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-28 04:56:31

Mejor?

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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-27 16:34:52