Comment obtenir un horodatage en JavaScript?

4016

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.

pupeno
la source
Comment obtenir un horodatage 64 bits dans JS?
Alexander Mills
@AlexanderMills Étant donné que JavaScript ne prend pas en charge les entiers 64 bits, vous devrez obtenir deux entiers 32 bits. Posez une autre question.
wizzwizz4

Réponses:

4917

Court et élégant:

+ new Date()

Un opérateur unaire comme plusdéclenche la valueOfméthode dans l' Dateobjet 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:

if (!Date.now) {
    Date.now = function() { return new Date().getTime(); }
}

Pour obtenir l'horodatage en quelques secondes , vous pouvez utiliser:

Math.floor(Date.now() / 1000)

Ou vous pouvez également utiliser:

Date.now() / 1000 | 0

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 nouvel Dateobjet. 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 :

new Date().getTime()

Que vous pouvez ensuite convertir en secondes comme ceci:

Math.round(new Date().getTime()/1000)

Et vous pouvez également utiliser la valueOfméthode que nous avons montrée ci-dessus:

new Date().valueOf()

Horodatage en millisecondes

var timeStampInMs = window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart ? window.performance.now() + window.performance.timing.navigationStart : Date.now();

console.log(timeStampInMs, Date.now());

daveb
la source
11
Node.js. est une autre exception notable. Je suis venu ici de Google cherchant à faire de même dans le nœud
Milan Babuškov
57
Ne Date.now() / 1000 | 0souffrira pas du problème de l' an 2038 ? new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
gengkev
3
ou même, sans utiliser Math.floor ..~~(Date.now() / 1000)
Matej
14
@ MilanBabuškov mais node.js prend en chargeDate.now()
OrangeDog
51
Bien qu'il +new Datasoit 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.
Harry Sadler
514

J'aime ça, car c'est petit:

+new Date

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:

Date.now()
xer0x
la source
636
Cette option est une mauvaise idée. Il est facilement ignoré, ressemble à une faute de frappe et s'appuie en réalité sur un effet secondaire de langue. Je vois un mauvais code.
inanutshellus
10
@Billy Si je me souviens bien, j'ai calculé l'horodatage dans les deux solutions suggérées 1M fois chacune, et calculé le temps d'exécution moyen. Je l'ai exécuté dans Firefox et Chrome, getTime étant plus rapide dans les deux navigateurs. Cela dit, même si c'était (légèrement) plus lent, je choisirais new Date().getTime(). Heureusement pour moi, la solution la plus rapide est déjà la solution lisible!
inanutshellus
11
D'accord avec @ FabrícioMatté. Le comportement d'opérateur unaire n'est peut-être pas rudimentaire, mais si vous ne l'avez pas révisé, ne vous attendez pas à pouvoir fonctionner efficacement dans de nombreuses équipes.
Jason T Featheringham
9
@Niklaus C'est parce que vous le concaténez à une autre chaîne. Dans ce cas, new Date().toString()est appelé.
kirb
7
par curiosité que fait l' +opérateur pour le faire sortir comme une ficelle?
zadubz
276

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):

var unix = Math.round(+new Date()/1000);

Cela vous donnera les millisecondes depuis l'époque (pas l'horodatage Unix):

var milliseconds = new Date().getTime();
Daithí
la source
4
PHP devrait fonctionner correctement avec des millisecondes, car il les utilise lui-même avec la fonction microtime ().
Nico Burns
5
Bien que microtime () soit présent, la plupart des fonctions liées au temps dans php s'attendent à ce que l'horodatage soit en secondes et non en millisecondes. De plus, microtime () retourne un flottant (si vous passez vrai) où la partie décimale est la fraction de seconde (précise à la microseconde), tandis que newDate (). GetTime () renvoie un int où il compte juste des millisecondes depuis l'époque. Par exemple (php) si vous appelez floor (microtime (true)), ce serait effectivement la même chose que le temps d'appel () qui est en secondes et non en micro ou en millisecondes. Diviser par 1000 comme ci-dessus est la solution la plus simple à cela.
gregghz
49
Au lieu de rond, utilisez le sol. 700 ms n'est toujours pas la seconde entière
Anagmate
Unix timestampvs Seconds since the Epoch. Ces deux ne sont-ils pas censés signifier la même chose?
Mudiaga Ejenavi
147
var time = Date.now || function() {
  return +new Date;
};

time();
Staale
la source
6
Pourquoi le || opérateur? Date.now () n'est-il pas disponible sur tous les navigateurs?
Chris Noe
67
Date.now () provient de JavaScript 1.5 et n'est pas pris en charge sur IE 8.
Søren Løvborg
9
Les moteurs qui n'ont pas été mis à jour pour prendre en charge la méthode Date.now peuvent contourner son absence en utilisant le module d'interface suivant: if (! Date.now) {Date.now = function now () {return + (new Date); }; }
Per Quested Aronsson
ou(Date.now||function(){return +new Date})();
130

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:

Date.now() /1000 |0

Attention : il pourrait casser en 2038 et retourner des nombres négatifs si vous faites la |0magie. Utiliser à la Math.floor()place d'ici là

Math.floor() Solution:

Math.floor(Date.now() /1000);

Une alternative ringarde de Derek 朕 會 功夫 tirée des commentaires ci-dessous cette réponse:

new Date/1e3|0

Polyfill pour Date.now()travailler:

Pour le faire fonctionner dans IE, vous pouvez le faire (Polyfill de MDN ):

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

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:

var now = (function () {
    var year = new Date(new Date().getFullYear().toString()).getTime();
    return function () {
        return Date.now() - year
    }
})();

Une sortie de ce à quoi il ressemblera:

new Date()
Thu Oct 29 2015 08:46:30 GMT+0100 (Mitteleuropäische Zeit )
new Date(now())
Thu Oct 29 1970 09:46:30 GMT+0100 (Mitteleuropäische Zeit )

Bien sûr, cela interrompra l'heure d'été, mais selon ce que vous construisez, cela peut vous être utile si vous devez effectuer des opérations binaires sur les horodatages après que int32 se soit interrompu en 2038.

Cela renverra également des valeurs négatives, mais uniquement si l'utilisateur de ce PC sur lequel vous exécutez votre code modifie l'horloge de son PC au moins au 31 décembre de l'année précédente.


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:

var relativeTime = (function () {
    var start = Date.now();
    return function () {
        return Date.now() - start
    }
})();

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 |0fait:

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 de Date.now() / 1000en 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.

Soyez averti cependant: il convertira un double 64 bits en un entier 32 bits. Cela entraînera une perte d'informations lors du traitement d'un grand nombre. Les horodatages s'arrêteront après 2038 en raison d'un dépassement d'entier de 32 bits.


Pour plus d'informations sur Date.nowsuivez ce lien: Date.now()@ MDN

GottZ
la source
12
| 0 est similaire à Math.floor () car il s'agit d'une opération sur les bits (qui ne fonctionne pas avec les flottants). habituellement c'est encore plus rapide que Math.floor () car ce n'est pas un appel de fonction, c'est un opérateur natif javascript.
GottZ
8
Date.now()référence: developer.mozilla.org/en-US/docs/JavaScript/Reference/…
Web_Designer
@Christophe pourquoi pensez-vous cela? à cause du correctif IE? sauf que cette partie est assez simple et personnalisable je pense.
GottZ
5
les polyfills / shims ne sont pas compliqués. Ils résultent de la prise en charge de 9 versions de navigateur différentes et de la décision de l'industrie de choisir les normes qu'ils adoptent et celles qu'ils inventent.
rlemon
8
Pour référence, le plus compact que vous pouvez obtenir est new Date/1e3|0.
Derek 朕 會 功夫
88
var timestamp = Number(new Date()); // current time as number
aemkei
la source
61

jQuery fournit sa propre méthode pour obtenir l'horodatage:

var timestamp = $.now();

(en plus il implémente simplement l' (new Date).getTime()expression)

REF: http://api.jquery.com/jQuery.now/

Vision
la source
2
jQuery prendra également en charge tous les problèmes de compatibilité entre les navigateurs avec les différentes API JavaScript.
Henry Heleine
4
@VisioN J'ai cherché un moyen de faire des horodatages dans Node.js. J'ai trouvé une question javascript dans stackoverflow et j'obtiens une réponse dans jQuery, ce qui n'aide pas. Javascript et jQuery sont deux choses. Si nous donnons des réponses à chaque framework javascript, nous nous retrouvons avec un nombre potentiellement infini de réponses, ce qui est contraire à la philosophie des Q / A dans stackoverflow. Aussi: i.stack.imgur.com/Ledgt.gif : D
Pierre Arlaud
5
@VisioN Qui a dit que javascript devait être utilisé dans un navigateur?
Pierre Arlaud
5
@PierreArlaud Et qui a dit que cette question concernait uniquement NodeJS?
VisioN
2
@KingRider Il n'y a pas besoin de parseInt, car la valeur résultante sera toujours a Number.
VisioN
46

console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch

Tom Viner
la source
4
Cela équivaut à +new Date.. :)
19h
8
fais justeDate.now()
Orlando
@Orlando voir les autres réponses, le problème avec now () est le support du navigateur
Christophe
@Christophe vient de faire un simple polyfill, developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Orlando
@Christophe Date.now () est plus rapide que Date (). ValueOf () .. jsperf.com/new-date-vs-date-now-vs-performance-now/6 donc c'est mieux si vous utilisez simplement un polyfill lorsque n'est pas disponible.
Orlando
43

En plus des autres options, si vous voulez un ISO de format de date, vous pouvez l'obtenir directement

console.log(new Date().toISOString());

Joaquinglezsantos
la source
Il ne renvoie pas un entier avec la question posée!
alexventuraio
@AlexVentura avec une chaîne dateformat ISO, vous pouvez instancier un objet date et soustraire entre eux. Par exemple:new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Joaquinglezsantos
41

Juste pour additionner, voici une fonction pour retourner une chaîne d'horodatage en Javascript. Exemple: 15:06:38 PM

function displayTime() {
    var str = "";

    var currentTime = new Date()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()
    var seconds = currentTime.getSeconds()

    if (minutes < 10) {
        minutes = "0" + minutes
    }
    if (seconds < 10) {
        seconds = "0" + seconds
    }
    str += hours + ":" + minutes + ":" + seconds + " ";
    if(hours > 11){
        str += "PM"
    } else {
        str += "AM"
    }
    return str;
}
l'amour en direct
la source
11
L'OP demande un horodatage entier; il s'agit d'une représentation sous forme de chaîne de l'heure.
Brad Koch
3
"similaire à l'horodatage d'Unix, c'est-à-dire un seul chiffre qui représente l'heure actuelle"
Brad Koch
J'avais un code pour afficher l'heure mais certaines parties de l'Australie ont montré la date complète, ce script m'a aidé à le décomposer et à l'afficher correctement. (+1 pour cela)
Syfer
40

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:

Date.now(); //return 1495255666921

Dans MDN, il est mentionné comme ci-dessous:

La méthode Date.now () renvoie le nombre de millisecondes écoulées depuis le 1er janvier 1970 00:00:00 UTC.
Parce que now () est une méthode statique de Date, vous l'utilisez toujours comme Date.now ().

Si vous utilisez une version inférieure à ES5, Date.now();ne fonctionne pas et vous devez utiliser:

new Date().getTime();
Alireza
la source
29

Celui que je n'ai pas encore vu

Math.floor(Date.now() / 1000); // current time in seconds

Un autre que je n'ai pas encore vu est

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
Belldandu
la source
1
Date.now() /1000 |0fait de même et a déjà reçu une réponse
GottZ
3
bien. je l'ai bien sûr édité Math.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.
GottZ
Je pense que l'importation de la bibliothèque Lodash entière juste pour l'utiliser _.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 utilisation Date.now().
mgthomas99
27

La Date.getTime()méthode peut être utilisée avec un petit ajustement:

La valeur renvoyée par la méthode getTime est le nombre de millisecondes depuis le 1er janvier 1970 00:00:00 UTC.

Divisez le résultat par 1000 pour obtenir l'horodatage Unix, floorsi nécessaire:

(new Date).getTime() / 1000

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é.

Salman A
la source
7
Vous n'avez pas besoin des parenthèses:new Date().getTime() / 1000
Ry-
14
Vous n'en avez pas besoin, mais ils rendent le code plus lisible (à mon humble avis). Une question de goût, je suppose.
johndodo
Vous n'avez même pas besoin ()après new Dateet .getTime()puisque de toute façon /, l'objet Date sera converti en nombre.
Derek 朕 會 功夫
25

Le code Math.floor(new Date().getTime() / 1000)peut être raccourci new Date / 1E3 | 0.

Pensez à ignorer l' getTime()invocation directe et à l'utiliser | 0en remplacement de la Math.floor()fonction. Il est également bon de se rappeler que 1E3c'est un équivalent plus court pour 1000(les majuscules E sont préférées aux minuscules pour indiquer 1E3une constante).

En conséquence, vous obtenez les éléments suivants:

var ts = new Date / 1E3 | 0;

console.log(ts);

Valentin Podkamennyi
la source
3
@dchest 37-14 "Math.floor(new Date().getTime()/1000)".length == 37; "new Date/1E3|0".length == 14; = 23 octets;
Valentin Podkamennyi
@MatthieuCharbonnier Qu'est-ce qui est exactement illisible? Signe de division, 1E3, tuyau ou zéro? Veuillez consulter l'extrait de code dans ma réponse ci-dessus.
Valentin Podkamennyi
1
@Valentin Vous réduisez / compliquez le code simple pour presque aucun avantage. Je ne vois pas l'intérêt de faire ça. Nous ne sommes pas sur Code Golf!
Matthieu Charbonnier
@MatthieuCharbonnier, Il n'y a rien de compliqué, juste une syntaxe et des opérateurs basiques. L'essentiel est d'écrire un code court, clair et compréhensible.
Valentin Podkamennyi
2
@Valentin Veuillez m'expliquer comment le remplacement Math.floor()par |0rend ce code "clair et compréhensible". Expliquez-moi quel est l'intérêt de sauver 1 octet en le remplaçant 1000par 1E3. C'est ridicule. Je vois un mauvais code.
Matthieu Charbonnier
24

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

  • La solution 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-navigateur
  • La solution performance.now()(G), ce qui est surprenant, est plus de 100 fois plus rapide que les autres solutions sur Firefox mais la plus lente sur Chrome
  • Les solutions C, D, F sont assez lentes sur tous les navigateurs

entrez la description de l'image ici

Détails

Résultats pour chrome

entrez la description de l'image ici

Vous pouvez effectuer des tests sur votre machine ICI

Le code utilisé dans les tests est présenté dans l'extrait ci-dessous

Kamil Kiełczewski
la source
Je serais intéressé si vous testiez performance.now()car il est censé être le plus précis en termes de tampon.
SamsonTheBrave
@SamsonTheBrave merci pour votre commentaire - Je mets à jour la réponse
Kamil Kiełczewski
Génial, merci pour votre mise à jour! J'ai remarqué que vous voyiez une différence de performances maintenant la vitesse sur Firefox. Cela pourrait être le résultat de Firefox privacy.reduceTimerPrecisionqui 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/now
SamsonTheBrave
22

Je recommande fortement d'utiliser moment.js. Pour obtenir le nombre de millisecondes depuis l'époque UNIX, faites

moment().valueOf()

Pour obtenir le nombre de secondes depuis l'époque UNIX, faites

moment().unix()

Vous pouvez également convertir des temps comme ceci:

moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()

Je fais ça tout le temps. Sans jeu de mots.

Pour utiliser moment.jsdans le navigateur:

<script src="moment.js"></script>
<script>
    moment().valueOf();
</script>

Pour plus de détails, y compris d'autres façons d'installer et d'utiliser MomentJS, consultez leurs documents

Un paquet entier
la source
21

Pour un horodatage avec une résolution en microsecondes, il y a performance.now:

function time() { 
  return performance.now() + performance.timing.navigationStart;
}

Cela pourrait par exemple céder 1436140826653.139, tout en Date.nowdonnant seulement 1436140826653.

iter
la source
21

Vous ne pouvez utiliser que

    var timestamp = new Date().getTime();
    console.log(timestamp);

pour obtenir l'horodatage actuel. Pas besoin de faire plus.

Jitendra Pawar
la source
20

Voici une fonction simple pour générer un horodatage au format: mm / jj / aa hh: mi: ss

function getTimeStamp() {
    var now = new Date();
    return ((now.getMonth() + 1) + '/' +
            (now.getDate()) + '/' +
             now.getFullYear() + " " +
             now.getHours() + ':' +
             ((now.getMinutes() < 10)
                 ? ("0" + now.getMinutes())
                 : (now.getMinutes())) + ':' +
             ((now.getSeconds() < 10)
                 ? ("0" + now.getSeconds())
                 : (now.getSeconds())));
}
deepakssn
la source
10
@ b123400 - Voici la version Lisp: (new (chain (-date) (to-i-s-o-string))).
Inaimathi
20

// The Current Unix Timestamp
// 1443534720 seconds since Jan 01 1970. (UTC)

// seconds
console.log(Math.floor(new Date().valueOf() / 1000)); // 1443534720
console.log(Math.floor(Date.now() / 1000)); // 1443534720
console.log(Math.floor(new Date().getTime() / 1000)); // 1443534720

// milliseconds
console.log(Math.floor(new Date().valueOf())); // 1443534720087
console.log(Math.floor(Date.now())); // 1443534720087
console.log(Math.floor(new Date().getTime())); // 1443534720087

// jQuery
// seconds
console.log(Math.floor($.now() / 1000)); // 1443534720
// milliseconds
console.log($.now()); // 1443534720087
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

myrtille0xff
la source
16

Tous les navigateurs non pris en charge par Date.now, vous pouvez l'utiliser pour obtenir l'heure de la date actuelle:

currentTime = Date.now() || +new Date()
mr.boyfox
la source
3
(Reformulation de mon commentaire) Votre code a un problème: il exécute la méthode Date.now au lieu de vérifier d'abord son support. Sur les navigateurs plus anciens, cela provoquera Date.now n'est pas une erreur de fonction .
Salman A
Peut-être une meilleure alternative serait d'utiliser un opérateur ternaire Affirmer que Date.nowexiste réellement (et est une fonction), avant de tenter de l' invoquer: currentTime = typeof Date.now === "function" ? Date.now() : +new Date().
mgthomas99
14

Celui-ci a une solution: qui convertit le tampon unixtime en tim en js essayez ceci

var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();
Anoop PS
la source
14

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:

var date = new Date();
var timestamp = +date;
George
la source
J'étais sur le point d'écrire le nouvel objet Date (). Vous pouvez consigner le journal (nouvelle Date ()) puis parcourir les méthodes associées sous le nouvel objet / fonction Date ()
sg28
14

Si vous voulez un moyen simple de générer un horodatage dans Node.js, cela fonctionne bien.

var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );

Notre équipe l'utilise pour casser le cache dans un environnement local. La sortie est /dist/css/global.css?v=245521377245521377est l'horodatage généré par hrtime().

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.

Kevin Leary
la source
13

Cela semble fonctionner.

console.log(clock.now);
// returns 1444356078076

console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16

console.log(clock.format(clock.now + clock.add(10, 'minutes'))); 
//returns 10/8/2015 21:08:18

var clock = {
    now:Date.now(),
    add:function (qty, units) {
            switch(units.toLowerCase()) {
                case 'weeks'   :  val = qty * 1000 * 60 * 60 * 24 * 7;  break;
                case 'days'    :  val = qty * 1000 * 60 * 60 * 24;  break;
                case 'hours'   :  val = qty * 1000 * 60 * 60;  break;
                case 'minutes' :  val = qty * 1000 * 60;  break;
                case 'seconds' :  val = qty * 1000;  break;
                default       :  val = undefined;  break;
                }
            return val;
            },
    format:function (timestamp){
            var date = new Date(timestamp);
            var year = date.getFullYear();
            var month = date.getMonth() + 1;
            var day = date.getDate();
            var hours = date.getHours();
            var minutes = "0" + date.getMinutes();
            var seconds = "0" + date.getSeconds();
            // Will display time in xx/xx/xxxx 00:00:00 format
            return formattedTime = month + '/' + 
                                day + '/' + 
                                year + ' ' + 
                                hours + ':' + 
                                minutes.substr(-2) + 
                                ':' + seconds.substr(-2);
            }
};
Ronnie Royston
la source
13

Si c'est à des fins de journalisation, vous pouvez utiliser ISOString

new Date().toISOString()

"2019-05-18T20: 02: 36.694Z"

cenkarioz
la source
12

Pour les utilisateurs de lodash et de soulignement , utilisez _.now.

var timestamp = _.now(); // in milliseconds
Muhammad Reda
la source
9

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:

Date.now()

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:

const currentTimestamp = (!Date.now ? +new Date() : Date.now());

Cela retournera les millisecondes depuis le temps de l'époque, bien sûr, pas les secondes.

Documentation MDN sur Date.now

Olemak
la source
8

manière plus simple:

var timeStamp=event.timestamp || new Date().getTime();
Vicky Gonsalves
la source
Je sais d'où eventvient. 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!
alexventuraio
J'étais sur le point d'écrire le nouvel objet Date (). Vous pouvez consigner le journal (nouvelle Date ()) puis parcourir les méthodes associées sous le nouvel objet / fonction Date ()
sg28