66 votes

Existe-t-il un moyen d'obtenir l'heure actuelle en nanosecondes en utilisant JavaScript ?

Je sais donc que je peux obtenir l'heure actuelle en millisecondes en utilisant JavaScript. Mais, est-il possible d'obtenir l'heure actuelle en nanosecondes à la place ?

84voto

Jeffrey Yasskin Points 1472

Obtenez une précision à la microseconde dans la plupart des navigateurs en utilisant :

window.performance.now()

Voir aussi :

1 votes

Le préfixe "webkit" a été supprimé vers Chrome 24. [developer.mozilla.org/fr/US/docs/Web/API/](https://developer.mozilla.org/en-US/docs/Web/API/Performance.now()?redirectlocale=en-US&redirectslug=Web%2FAPI%2FPerformanceTiming.now)

1 votes

Notez que window.performance.now() renvoie le temps relatif à la navigationStart de la page plutôt qu'à l'époque UNIX. Voir ma réponse ci-dessous pour un extrait de code pour l'heure actuelle.

10 votes

Pourtant, les microsecondes ne sont pas des nanosecondes, donc performance.now() est inutile ici.

12voto

Ronenz Points 599

En se basant sur la réponse de Jeffery, pour obtenir un horodatage absolu (comme le souhaite le PO), le code serait le suivant :

var TS = window.performance.timing.navigationStart + window.performance.now();

le résultat est en unités de millisecondes mais est une valeur à virgule flottante rapportée " précis au millième de milliseconde ".

4 votes

AVERTISSEMENT performance.timing.navigationStart a été déprécié.

8voto

Tahsin Turkoz Points 1803

Dans les environnements côté serveur comme Node.js, vous pouvez utiliser la fonction suivante pour obtenir le temps en nanoseconde

function getNanoSecTime() {
  var hrTime = process.hrtime();
  return hrTime[0] * 1000000000 + hrTime[1];
}

Obtenez également des microsecondes de la même manière :

function getMicSecTime() {
  var hrTime = process.hrtime();
  return hrTime[0] * 1000000 + parseInt(hrTime[1] / 1000);
}

6voto

Oui ! Essayez les excellents sazze's nano-temps

let now = require('nano-time');
now(); // '1476742925219947761' (returns as string due to JS limitation)

3 votes

NB -- pour le nœud uniquement -- utilise process.hrtime() (@TahsinTurkoz), et calcule ensuite un temps absolu à partir de celui-ci.

5voto

Non. Il n'y a aucune chance que vous obteniez une précision de l'ordre de la nanoseconde au niveau de la couche JavaScript.

Si vous essayez d'évaluer une opération très rapide, mettez-la dans une boucle qui l'exécute quelques milliers de fois.

2 votes

+1 ...et pourquoi le voudriez-vous ? Si cela doit être que précise qu'il ne devrait probablement pas être JavaScript en premier lieu. PS : Hey, mod : supprimer les commentaires incendiaires devrait laisser les commentaires valides intacts. C'est juste une idée.

0 votes

Est-ce que vous savez qui supprimer tous les commentaires ?

0 votes

Je sais, le nécropostage. Je viens de le faire. Démarrer la minuterie milliseconde, exécuter la fonction 10 000 000 de fois, arrêter la minuterie milliseconde et diviser le temps d'exécution par 10 000 000. Je chronométrais le minuteur lui-même pour le calibrer, car l'exécution du minuteur et le typage/concaténation de la sortie prennent du temps. Cela prend 3 microsecondes sur mon ordinateur, à environ 200 nanosecondes près.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X