Comment obtenir un horodatage en JavaScript?
Quelque chose de similaire à l' horodatage Unix , c'est-à-dire un numéro unique qui représente l'heure et la date actuelles. Soit sous forme de nombre, soit sous forme de chaîne.
Comment obtenir un horodatage en JavaScript?
Quelque chose de similaire à l' horodatage Unix , c'est-à-dire un numéro unique qui représente l'heure et la date actuelles. Soit sous forme de nombre, soit sous forme de chaîne.
Réponses:
Court et élégant:
Un opérateur unaire comme
plus
déclenche lavalueOf
méthode dans l'Date
objet et retourne l'horodatage (sans aucune modification).Détails:
Sur presque tous les navigateurs actuels, vous pouvez utiliser
Date.now()
pour obtenir l'horodatage UTC en millisecondes ; une exception notable à cela est IE8 et versions antérieures (voir le tableau de compatibilité ).Vous pouvez facilement créer une cale pour cela, cependant:
Pour obtenir l'horodatage en quelques secondes , vous pouvez utiliser:
Ou vous pouvez également utiliser:
Ce qui devrait être légèrement plus rapide, mais aussi moins lisible ( voir également cette réponse ).
Je recommanderais d'utiliser
Date.now()
(avec un module de compatibilité). C'est un peu mieux car il est plus court et ne crée pas de nouvelDate
objet. Cependant, si vous ne voulez pas de cale et de compatibilité maximale, vous pouvez utiliser la "vieille" méthode pour obtenir l'horodatage en millisecondes :Que vous pouvez ensuite convertir en secondes comme ceci:
Et vous pouvez également utiliser la
valueOf
méthode que nous avons montrée ci-dessus:Horodatage en millisecondes
la source
Date.now() / 1000 | 0
souffrira pas du problème de l' an 2038 ?new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
~~(Date.now() / 1000)
Date.now()
+new Data
soit intelligent, il n'est pas lisible par d'autres développeurs.Date.now()
est plus clair et garantit que tout le monde sait ce qui se passe.J'aime ça, car c'est petit:
J'aime aussi cela, car il est tout aussi court et compatible avec les navigateurs modernes, et plus de 500 personnes ont voté pour mieux:
la source
new Date().getTime()
. Heureusement pour moi, la solution la plus rapide est déjà la solution lisible!new Date().toString()
est appelé.+
opérateur pour le faire sortir comme une ficelle?JavaScript fonctionne avec le nombre de millisecondes depuis l'époque alors que la plupart des autres langues fonctionnent avec les secondes. Vous pouvez travailler avec des millisecondes mais dès que vous passez une valeur pour dire PHP, les fonctions natives PHP échoueront probablement. Donc, pour être sûr, j'utilise toujours les secondes, pas les millisecondes.
Cela vous donnera un horodatage Unix (en secondes):
Cela vous donnera les millisecondes depuis l'époque (pas l'horodatage Unix):
la source
Unix timestamp
vsSeconds since the Epoch
. Ces deux ne sont-ils pas censés signifier la même chose?la source
(Date.now||function(){return +new Date})();
Je fournis plusieurs solutions avec des descriptions dans cette réponse. N'hésitez pas à poser des questions si quelque chose n'est pas clair
PS: malheureusement, quelqu'un a fusionné cela à la première réponse sans donner de crédit.
Solution rapide et sale:
Math.floor()
Solution:Une alternative ringarde de Derek 朕 會 功夫 tirée des commentaires ci-dessous cette réponse:
Polyfill pour
Date.now()
travailler:Pour le faire fonctionner dans IE, vous pouvez le faire (Polyfill de MDN ):
Si vous ne vous souciez pas de l'année / du jour de la semaine / de l'heure d'été, vous pouvez le retirer et l'utiliser après 2038:
Si vous voulez simplement connaître l'heure relative à partir du moment où le code a été exécuté en premier, vous pouvez utiliser quelque chose comme ceci:
Dans le cas où vous utilisez jQuery, vous pouvez utiliser
$.now()
comme décrit dans la documentation de jQuery, ce qui rend le polyfill obsolète car en$.now()
interne fait la même chose:(new Date).getTime()
Si vous êtes simplement satisfait de la version de jQuery, pensez à voter pour cette réponse car je ne l'ai pas trouvée moi-même.
Maintenant, une petite explication de ce qui
|0
fait:En fournissant
|
, vous dites à l'interprète d'effectuer une opération binaire OU. Les opérations sur les bits nécessitent des nombres absolus qui transforment le résultat décimal deDate.now() / 1000
en un entier.Au cours de cette conversion, les décimales sont supprimées, ce qui donne le même résultat que l'utilisation,
Math.floor()
mais en utilisant moins de code.Pour plus d'informations sur
Date.now
suivez ce lien:Date.now()
@ MDNla source
Date.now()
référence: developer.mozilla.org/en-US/docs/JavaScript/Reference/…new Date/1e3|0
.la source
jQuery fournit sa propre méthode pour obtenir l'horodatage:
(en plus il implémente simplement l'
(new Date).getTime()
expression)REF: http://api.jquery.com/jQuery.now/
la source
parseInt
, car la valeur résultante sera toujours aNumber
.la source
+new Date
.. :)Date.now()
En plus des autres options, si vous voulez un ISO de format de date, vous pouvez l'obtenir directement
la source
new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Juste pour additionner, voici une fonction pour retourner une chaîne d'horodatage en Javascript. Exemple: 15:06:38 PM
la source
Date , un objet natif en JavaScript est la façon dont nous obtenons toutes les données sur le temps.
Faites juste attention en JavaScript, l'horodatage dépend de l'ordinateur client, donc ce n'est pas un horodatage précis à 100%. Pour obtenir le meilleur résultat, vous devez obtenir l'horodatage côté serveur .
Quoi qu'il en soit, ma façon préférée est d'utiliser la vanille. C'est une façon courante de le faire en JavaScript:
Dans MDN, il est mentionné comme ci-dessous:
Si vous utilisez une version inférieure à ES5,
Date.now();
ne fonctionne pas et vous devez utiliser:la source
Celui que je n'ai pas encore vu
Un autre que je n'ai pas encore vu est
la source
Date.now() /1000 |0
fait de même et a déjà reçu une réponseMath.floor()
dedans mais seulement pour clarifier qu'il a le même effet que|0
. je ne voulais pas te faire de mal ou quoi que ce soit. Je voulais juste vous dire que votre réponse existe déjà d'une manière ou d'une autre. en regardant toutes les réponses données, il y en a qui remarquent le sol d'une manière ou d'une autre._.now()
est un peu exagérée. Je recommanderais seulement d'importer la fonctionnalité Lodash que vous devez utiliser (dans ce cas, _.now () sur NPM ), mais même ils ont déconseillé leur package au profit de leur utilisationDate.now()
.La
Date.getTime()
méthode peut être utilisée avec un petit ajustement:Divisez le résultat par 1000 pour obtenir l'horodatage Unix,
floor
si nécessaire:La
Date.valueOf()
méthode est fonctionnellement équivalente àDate.getTime()
, ce qui permet d'utiliser des opérateurs arithmétiques sur un objet date pour obtenir des résultats identiques. À mon avis, cette approche affecte la lisibilité.la source
new Date().getTime() / 1000
()
aprèsnew Date
et.getTime()
puisque de toute façon/
, l'objet Date sera converti en nombre.Le code
Math.floor(new Date().getTime() / 1000)
peut être raccourcinew Date / 1E3 | 0
.Pensez à ignorer l'
getTime()
invocation directe et à l'utiliser| 0
en remplacement de laMath.floor()
fonction. Il est également bon de se rappeler que1E3
c'est un équivalent plus court pour1000
(les majuscules E sont préférées aux minuscules pour indiquer1E3
une constante).En conséquence, vous obtenez les éléments suivants:
la source
"Math.floor(new Date().getTime()/1000)".length == 37;
"new Date/1E3|0".length == 14;
= 23 octets;Math.floor()
par|0
rend ce code "clair et compréhensible". Expliquez-moi quel est l'intérêt de sauver 1 octet en le remplaçant1000
par1E3
. C'est ridicule. Je vois un mauvais code.Performance
Aujourd'hui - 2020.04.23 J'effectue des tests pour les solutions choisies. J'ai testé sur MacOs High Sierra 10.13.6 sur Chrome 81.0, Safari 13.1, Firefox 75.0
Conclusions
Date.now()
(E) est la plus rapide sur Chrome et Safari et la deuxième sur Firefox et c'est probablement le meilleur choix pour une solution rapide multi-navigateurperformance.now()
(G), ce qui est surprenant, est plus de 100 fois plus rapide que les autres solutions sur Firefox mais la plus lente sur ChromeDétails
Résultats pour chrome
Vous pouvez effectuer des tests sur votre machine ICI
Le code utilisé dans les tests est présenté dans l'extrait ci-dessous
Afficher l'extrait de code
la source
performance.now()
car il est censé être le plus précis en termes de tampon.privacy.reduceTimerPrecision
qui arrondit les résultats à la milliseconde la plus proche. Il est également activé par défaut mais peut être désactivé. developer.mozilla.org/en-US/docs/Web/API/Performance/nowJe recommande fortement d'utiliser
moment.js
. Pour obtenir le nombre de millisecondes depuis l'époque UNIX, faitesPour obtenir le nombre de secondes depuis l'époque UNIX, faites
Vous pouvez également convertir des temps comme ceci:
Je fais ça tout le temps. Sans jeu de mots.
Pour utiliser
moment.js
dans le navigateur:Pour plus de détails, y compris d'autres façons d'installer et d'utiliser MomentJS, consultez leurs documents
la source
Pour un horodatage avec une résolution en microsecondes, il y a
performance.now
:Cela pourrait par exemple céder
1436140826653.139
, tout enDate.now
donnant seulement1436140826653
.la source
Vous ne pouvez utiliser que
pour obtenir l'horodatage actuel. Pas besoin de faire plus.
la source
Voici une fonction simple pour générer un horodatage au format: mm / jj / aa hh: mi: ss
la source
(new (chain (-date) (to-i-s-o-string)))
.la source
Tous les navigateurs non pris en charge par Date.now, vous pouvez l'utiliser pour obtenir l'heure de la date actuelle:
la source
Date.now
existe réellement (et est une fonction), avant de tenter de l' invoquer:currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
.Celui-ci a une solution: qui convertit le tampon unixtime en tim en js essayez ceci
la source
L'autre jour, j'ai appris une façon vraiment cool de convertir un objet Date donné en un horodatage Unix à partir du code source de JQuery Cookie .
Voici un exemple:
la source
Si vous voulez un moyen simple de générer un horodatage dans Node.js, cela fonctionne bien.
Notre équipe l'utilise pour casser le cache dans un environnement local. La sortie est
/dist/css/global.css?v=245521377
où245521377
est l'horodatage généré parhrtime()
.J'espère que cela aide, les méthodes ci-dessus peuvent également fonctionner, mais j'ai trouvé que c'était l'approche la plus simple pour nos besoins dans Node.js.
la source
Cela semble fonctionner.
la source
Si c'est à des fins de journalisation, vous pouvez utiliser ISOString
new Date().toISOString()
la source
Pour les utilisateurs de lodash et de soulignement , utilisez
_.now
.la source
Moment.js peut éliminer une grande partie de la douleur liée au traitement des dates Javascript.
Voir: http://momentjs.com/docs/#/displaying/unix-timestamp/
la source
moment().valueOf()
. Voir ma réponse.Au moment d'écrire ces lignes, la première réponse a 9 ans et beaucoup de choses ont changé depuis - notamment, nous avons un support quasi universel pour une solution non hacky:
Si vous voulez être absolument certain que cela ne se cassera pas dans un ancien navigateur (avant ie9), vous pouvez le mettre derrière un chèque, comme ceci:
Cela retournera les millisecondes depuis le temps de l'époque, bien sûr, pas les secondes.
Documentation MDN sur Date.now
la source
manière plus simple:
la source
event
vient. Vous devez donner une meilleure explication de la façon dont vous le résolvez au lieu d'écrire une réponse. S'il vous plaît!