Wie erhält man einen Zeitstempel in JavaScript?

4014

Wie kann ich einen Zeitstempel in JavaScript erhalten?

Ähnlich wie beim Unix-Zeitstempel , dh eine einzelne Zahl, die die aktuelle Uhrzeit und das aktuelle Datum darstellt. Entweder als Zahl oder als Zeichenfolge.

pupeno
quelle
Wie bekomme ich einen 64-Bit-Zeitstempel in JS?
Alexander Mills
@AlexanderMills Da JavaScript keine 64-Bit-Ganzzahlen unterstützt, müssen Sie zwei 32-Bit-Ganzzahlen erhalten. Stellen Sie eine andere Frage.
wizzwizz4

Antworten:

4913

Short & Snazzy:

+ new Date()

Ein unärer Operator wie pluslöst die valueOfMethode im DateObjekt aus und gibt den Zeitstempel zurück (ohne Änderung).

Einzelheiten:

In fast allen aktuellen Browsern können Sie Date.now()den UTC-Zeitstempel in Millisekunden abrufen . Eine bemerkenswerte Ausnahme ist IE8 und früher (siehe Kompatibilitätstabelle ).

Sie können jedoch leicht eine Unterlegscheibe dafür herstellen:

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

Um den Zeitstempel in Sekunden zu erhalten , können Sie Folgendes verwenden:

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

Oder alternativ könnten Sie verwenden:

Date.now() / 1000 | 0

Das sollte etwas schneller sein, aber auch weniger lesbar ( siehe auch diese Antwort ).

Ich würde empfehlen, Date.now()(mit Kompatibilitäts-Shim) zu verwenden. Es ist etwas besser, weil es kürzer ist und kein neues DateObjekt erstellt. Wenn Sie jedoch keine Unterlegscheibe und maximale Kompatibilität wünschen, können Sie die "alte" Methode verwenden, um den Zeitstempel in Millisekunden abzurufen :

new Date().getTime()

Was Sie dann wie folgt in Sekunden umrechnen können:

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

Sie können auch die oben gezeigte valueOfMethode verwenden:

new Date().valueOf()

Zeitstempel in Millisekunden

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
quelle
11
Eine weitere bemerkenswerte Ausnahme ist node.js. Ich bin von Google hierher gekommen, um dasselbe in Node zu tun
Milan Babuškov
57
Date.now() / 1000 | 0Leiden Sie nicht unter dem Problem des Jahres 2038 ? new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
Gengkev
3
oder sogar ohne Math.floor ..~~(Date.now() / 1000)
Matej
14
@ MilanBabuškov aber node.js unterstütztDate.now()
OrangeDog
51
Es +new Dataist zwar clever, aber für andere Entwickler nicht lesbar. Date.now()ist klarer und stellt sicher, dass alle anderen wissen, was los ist.
Harry Sadler
514

Ich mag das, weil es klein ist:

+new Date

Ich mag das auch, weil es genauso kurz ist und mit modernen Browsern kompatibel ist und über 500 Leute dafür gestimmt haben, dass es besser ist:

Date.now()
xer0x
quelle
636
Diese Option ist eine schlechte Idee. Es wird leicht übersehen, sieht aus wie ein Tippfehler und beruht in Wirklichkeit auf einem sprachlichen Nebeneffekt. Ich sehe schlechten Code.
Inanutshellus
10
@Billy Soweit ich mich erinnere, habe ich den Zeitstempel in den beiden vorgeschlagenen Lösungen jeweils 1 Million Mal berechnet und die durchschnittliche Laufzeit berechnet. Ich habe es in Firefox und Chrome ausgeführt, wobei getTime in beiden Browsern schneller ist. Das heißt, selbst wenn es (geringfügig) langsamer wäre, würde ich wählen new Date().getTime(). Zum Glück ist die schnellere Lösung bereits die lesbare Lösung!
Inanutshellus
11
Einverstanden mit @ FabrícioMatté. Unäres Bedienerverhalten ist möglicherweise nicht rudimentär, aber wenn Sie es nicht aufgefrischt haben, erwarten Sie nicht, dass Sie in vielen Teams effektiv arbeiten können.
Jason T Featheringham
9
@Niklaus Das liegt daran, dass Sie es mit einer anderen Zeichenfolge verketten. In diesem Fall new Date().toString()wird aufgerufen.
Kirb
7
Was +unternimmt der Bediener aus Neugier , um es wie eine Schnur herauszubringen?
Zadubz
276

JavaScript arbeitet mit der Anzahl der Millisekunden seit der Epoche, während die meisten anderen Sprachen mit den Sekunden arbeiten. Sie könnten mit Millisekunden arbeiten, aber sobald Sie einen Wert für PHP übergeben, werden die nativen PHP-Funktionen wahrscheinlich fehlschlagen. Um sicher zu gehen, verwende ich immer die Sekunden, nicht Millisekunden.

Dadurch erhalten Sie einen Unix-Zeitstempel (in Sekunden):

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

Dies gibt Ihnen die Millisekunden seit der Epoche (nicht Unix-Zeitstempel):

var milliseconds = new Date().getTime();
Daithí
quelle
4
PHP sollte mit Millisekunden gut funktionieren, da es sie selbst mit der Funktion microtime () verwendet.
Nico Burns
5
Während microtime () vorhanden ist, erwarten die meisten zeitbezogenen Funktionen in PHP, dass der Zeitstempel in Sekunden und nicht in Millisekunden angegeben wird. Darüber hinaus gibt microtime () einen Gleitkommawert zurück (wenn Sie true übergeben), wobei der Dezimalteil die Bruchteile einer Sekunde ist (auf die Mikrosekunde genau), während newDate (). GetTime () einen int zurückgibt, bei dem seitdem nur Millisekunden gezählt werden die Epoche. Zum Beispiel (PHP), wenn Sie Floor aufrufen würden (Microtime (true)), wäre dies effektiv dasselbe wie Calling Time (), die in Sekunden und nicht in Micro oder Millisekunden angegeben ist. Das Teilen durch 1000 wie oben ist die einfachste Lösung dafür.
Gregghz
49
Verwenden Sie statt rund Boden. 700 ms ist immer noch nicht die ganze Sekunde
Anagmate
Unix timestampvs Seconds since the Epoch. Sollen diese beiden nicht dasselbe bedeuten?
Mudiaga Ejenavi
147
var time = Date.now || function() {
  return +new Date;
};

time();
Staale
quelle
6
Warum die || Operator? Ist Date.now () nicht in allen Browsern verfügbar?
Chris Noe
67
Date.now () stammt aus JavaScript 1.5 und wird von IE 8 nicht unterstützt.
Søren Løvborg
9
Engines, die nicht aktualisiert wurden, um die Date.now-Methode zu unterstützen, können das Fehlen mithilfe der folgenden Shim umgehen: if (! Date.now) {Date.now = function now () {return + (neues Datum); }; }
Per Quested Aronsson
oder(Date.now||function(){return +new Date})();
130

Ich biete mehrere Lösungen mit Beschreibungen in dieser Antwort. Fühlen Sie sich frei, Fragen zu stellen, wenn etwas unklar ist
PS: Leider hat jemand dies mit der Top-Antwort zusammengeführt, ohne Kredit zu geben.


Schnelle und schmutzige Lösung:

Date.now() /1000 |0

Warnung : Es könnte 2038 brechen und negative Zahlen zurückgeben, wenn Sie die |0Magie ausführen. Verwenden Sie Math.floor()stattdessen zu diesem Zeitpunkt

Math.floor() Lösung:

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

Eine nerdige Alternative von Derek 功夫 會 功夫 aus den Kommentaren unter dieser Antwort:

new Date/1e3|0

Polyfill zum Date.now()Arbeiten:

Um es im IE zum Laufen zu bringen, können Sie dies tun (Polyfill von MDN ):

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

Wenn Sie sich nicht für das Jahr / den Wochentag / die Sommerzeit interessieren, können Sie es entfernen und nach 2038 verwenden:

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

Einige Ausgaben, wie es aussehen wird:

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 )

Natürlich wird die Sommerzeit unterbrochen, aber je nachdem, was Sie erstellen, kann dies für Sie nützlich sein, wenn Sie Binäroperationen für Zeitstempel ausführen müssen, nachdem int32 im Jahr 2038 unterbrochen wurde.

Dies gibt auch negative Werte zurück, jedoch nur, wenn der Benutzer des PCs, auf dem Sie Ihren Code ausführen, die Uhr seines PCs mindestens bis zum 31. Dezember des Vorjahres ändert.


Wenn Sie nur die relative Zeit ab dem Zeitpunkt wissen möchten, an dem der Code zuerst ausgeführt wurde, können Sie Folgendes verwenden:

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

Wenn Sie jQuery verwenden, können Sie es $.now()wie in den Dokumenten von jQuery beschrieben verwenden , wodurch die Polyfüllung überflüssig wird, da $.now()intern dasselbe getan wird:(new Date).getTime()

Wenn Sie sich nur über die Version von jQuery freuen, sollten Sie diese Antwort positiv bewerten , da ich sie selbst nicht gefunden habe.


Nun eine kleine Erklärung dessen, was |0tut:

Durch Angabe weisen |Sie den Interpreter an, eine binäre ODER-Verknüpfung auszuführen. Bitoperationen erfordern absolute Zahlen, die das Dezimalergebnis von Date.now() / 1000in eine Ganzzahl umwandeln.

Während dieser Konvertierung werden Dezimalstellen entfernt, was zu demselben Ergebnis führt wie die Verwendung, Math.floor()jedoch mit weniger Code.

Seien Sie jedoch gewarnt: Es wird ein 64-Bit-Double in eine 32-Bit-Ganzzahl konvertiert. Dies führt zu Informationsverlust beim Umgang mit großen Zahlen. Zeitstempel werden nach 2038 aufgrund eines 32-Bit-Ganzzahlüberlaufs unterbrochen.


Weitere Informationen finden Sie unter Date.nowfolgendem Link: Date.now()@ MDN

GottZ
quelle
12
| 0 ähnelt Math.floor (), da es sich um eine Bitoperation handelt (die mit Floats nicht funktioniert). Normalerweise ist es sogar schneller als Math.floor (), da es kein Funktionsaufruf ist, sondern ein nativer Javascript-Operator.
GottZ
@Christophe warum denkst du das? wegen des IE Fix? außer diesem Teil ist es ziemlich einfach und anpassbar, denke ich.
GottZ
5
Polyfills / Shims sind nicht kompliziert. Sie sind das Ergebnis der Unterstützung von 9 verschiedenen Browserversionen und der Entscheidung der Branche, welche Standards sie übernehmen und welche sie gerade bilden.
Rlemon
8
Als Referenz ist die kompakteste, die Sie bekommen können new Date/1e3|0.
Derek 15 會 功夫
88
var timestamp = Number(new Date()); // current time as number
Aemkei
quelle
61

jQuery bietet eine eigene Methode zum Abrufen des Zeitstempels:

var timestamp = $.now();

(außerdem implementiert es nur (new Date).getTime()Ausdruck)

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

Vision
quelle
2
jQuery kümmert sich auch um alle browserübergreifenden Kompatibilitätsprobleme mit den verschiedenen JavaScript-APIs.
Henry Heleine
4
@VisioN Ich habe nach einer Möglichkeit gesucht, Zeitstempel in Node.js zu erstellen. Ich habe im Stackoverflow eine Javascript-Frage gefunden und in jQuery eine Antwort erhalten, die nicht hilft. Javascript und jQuery sind zwei Dinge. Wenn wir Antworten auf jedes Javascript-Framework geben, erhalten wir möglicherweise eine unendliche Anzahl von Antworten, was gegen die Philosophie der Q / A im Stackoverflow verstößt. Auch: i.stack.imgur.com/Ledgt.gif : D
Pierre Arlaud
5
@VisioN Wer hat gesagt, dass Javascript in einem Browser verwendet werden muss?
Pierre Arlaud
5
@PierreArlaud Und wer hat gesagt, dass es bei dieser Frage nur um NodeJS geht?
VisioN
2
@KingRider Es ist nicht erforderlich parseInt, da der resultierende Wert immer a ist Number.
VisioN
46

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

Tom Viner
quelle
4
Dies entspricht +new Date.. :)
19h
8
tun Sie einfachDate.now()
Orlando
@ Orlando sehen die anderen Antworten, das Problem mit now () ist Browser-Unterstützung
Christophe
@Christophe machen Sie einfach eine einfache Polyfüllung, developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Orlando
4
@ Orlando genau, nicht nur Date.now ()
Christophe
43

Zusätzlich zu den anderen Optionen können Sie eine Datumsformat-ISO direkt abrufen

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

Joaquinglezsantos
quelle
Es wird keine Ganzzahl zurückgegeben, bei der die Frage gestellt wird!
Alexventuraio
@AlexVentura mit einer Zeichenfolge Datumsformat ISO können Sie ein Datumsobjekt instanziieren und zwischen ihnen subtrahieren. Zum Beispiel:new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Joaquinglezsantos
41

Um es zusammenzufassen, hier ist eine Funktion, um eine Zeitstempelzeichenfolge in Javascript zurückzugeben. Beispiel: 15:06:38 Uhr

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;
}
Live-Liebe
quelle
11
Das OP fragt nach einem ganzzahligen Zeitstempel. Dies ist eine Zeichenfolgendarstellung der Zeit.
Brad Koch
3
"Ähnlich wie der Zeitstempel von Unix, dh eine einzelne Zahl, die die aktuelle Zeit darstellt"
Brad Koch,
Ich hatte einen Code zum Anzeigen der Zeit, aber Teile von Australien zeigten das volle Datum. Dieses Skript half mir, es aufzuschlüsseln und richtig anzuzeigen. (+1 dafür)
Syfer
40

Datum , ein natives Objekt in JavaScript ist die Art und Weise, wie wir alle Daten über die Zeit erhalten.

Seien Sie in JavaScript nur vorsichtig, der Zeitstempel hängt vom Client-Computer ab, daher ist der Zeitstempel nicht 100% genau. Um das beste Ergebnis zu erzielen, müssen Sie den Zeitstempel von der Serverseite abrufen .

Wie auch immer, meine bevorzugte Art ist Vanille. Dies ist eine gängige Methode in JavaScript:

Date.now(); //return 1495255666921

In MDN wird es wie folgt erwähnt:

Die Date.now () -Methode gibt die Anzahl der Millisekunden zurück, die seit dem 1. Januar 1970 00:00:00 UTC vergangen sind.
Da now () eine statische Methode von Date ist, verwenden Sie sie immer als Date.now ().

Wenn Sie eine Version unter ES5 verwenden, Date.now();funktioniert dies nicht und Sie müssen Folgendes verwenden:

new Date().getTime();
Alireza
quelle
29

Eine habe ich noch nicht gesehen

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

Eine andere, die ich noch nicht gesehen habe, ist

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();
Belldandu
quelle
1
Date.now() /1000 |0tut das gleiche und wurde schon einmal beantwortet
GottZ
3
Gut. Ich habe es sicher bearbeitet Math.floor(), aber nur um klar zu machen, dass es den gleichen Effekt hat wie |0. Ich wollte dich nicht verletzen oder so. Ich wollte dir nur sagen, dass deine Antwort auf irgendeine Weise bereits existiert. Wenn man sich alle gegebenen Antworten ansieht, gibt es einige, die den Boden auf irgendeine Weise bemerken.
GottZ
Ich denke, das Importieren der gesamten Lodash-Bibliothek nur zur Verwendung _.now()ist ein wenig übertrieben. Ich würde empfehlen, nur die Lodash-Funktionalität zu importieren, die Sie verwenden müssen (in diesem Fall _.now () auf NPM ), aber selbst sie haben ihr Paket zugunsten der bloßen Verwendung abgelehntDate.now() .
mgthomas99
27

Die Date.getTime()Methode kann mit einer kleinen Änderung verwendet werden:

Der von der getTime-Methode zurückgegebene Wert gibt die Anzahl der Millisekunden seit dem 1. Januar 1970 um 00:00:00 UTC an.

Teilen Sie das Ergebnis durch 1000, um floorggf. den Unix-Zeitstempel zu erhalten :

(new Date).getTime() / 1000

Die Date.valueOf()Methode ist funktional äquivalent zu Date.getTime(), wodurch es möglich ist, arithmetische Operatoren für Datumsobjekte zu verwenden, um identische Ergebnisse zu erzielen. Meiner Meinung nach beeinträchtigt dieser Ansatz die Lesbarkeit.

Salman A.
quelle
7
Sie brauchen die Klammern nicht:new Date().getTime() / 1000
Ry-
14
Sie brauchen sie nicht, aber sie machen Code lesbarer (IMHO). Geschmackssache, denke ich.
Johndodo
Sie brauchen nicht einmal ()danach new Dateund .getTime()da /wird das Date-Objekt sowieso in eine Zahl umgewandelt.
Derek 15 會 功夫
25

Der Code Math.floor(new Date().getTime() / 1000)kann auf gekürzt werden new Date / 1E3 | 0.

Überlegen Sie, den direkten getTime()Aufruf zu überspringen und | 0als Ersatz für die Math.floor()Funktion zu verwenden. Es ist auch gut zu bedenken, dass 1E3es sich um ein kürzeres Äquivalent für handelt 1000(Großbuchstabe E wird gegenüber Kleinbuchstaben bevorzugt, um 1E3als Konstante anzugeben ).

Als Ergebnis erhalten Sie Folgendes:

var ts = new Date / 1E3 | 0;

console.log(ts);

Valentin Podkamennyi
quelle
3
@dchest "Math.floor(new Date().getTime()/1000)".length == 37; "new Date/1E3|0".length == 14; 37 -14 = 23 Bytes;
Valentin Podkamennyi
@MatthieuCharbonnier Was genau ist unlesbar? Teilungszeichen, 1E3, Rohr oder Null? Bitte beachten Sie das Code-Snippet in meiner Antwort oben.
Valentin Podkamennyi
1
@Valentin Sie minimieren / komplizieren einfachen Code für fast keine Vorteile. Ich sehe keinen Grund, das zu tun. Wir sind nicht auf Code Golf!
Matthieu Charbonnier
@MatthieuCharbonnier, Es gibt nichts Kompliziertes, nur grundlegende Syntax und Operatoren. Der Hauptpunkt ist, kurzen, klaren und verständlichen Code zu schreiben.
Valentin Podkamennyi
2
@Valentin Bitte erklären Sie mir, wie das Ersetzen Math.floor()durch |0diesen Code "klar und verständlich" macht. Erklären Sie mir, wozu Sie 1 Byte durch Ersetzen 1000durch sparen können 1E3. Das ist lächerlich. Ich sehe schlechten Code.
Matthieu Charbonnier
24

Performance

Heute - 2020.04.23 Ich führe Tests für ausgewählte Lösungen durch. Ich habe auf MacOs High Sierra 10.13.6 auf Chrome 81.0, Safari 13.1, Firefox 75.0 getestet

Schlussfolgerungen

  • Lösung Date.now()(E) ist unter Chrome und Safari am schnellsten und unter Firefox am zweitschnellsten. Dies ist wahrscheinlich die beste Wahl für eine schnelle browserübergreifende Lösung
  • Die performance.now()überraschende Lösung (G) ist mehr als 100-mal schneller als andere Lösungen in Firefox, in Chrome jedoch am langsamsten
  • Die Lösungen C, D, F sind in allen Browsern ziemlich langsam

Geben Sie hier die Bildbeschreibung ein

Einzelheiten

Ergebnisse für Chrom

Geben Sie hier die Bildbeschreibung ein

Sie können HIER einen Test auf Ihrem Computer durchführen

Der in Tests verwendete Code ist im folgenden Snippet dargestellt

Kamil Kiełczewski
quelle
Es würde mich interessieren, ob Sie getestet haben, performance.now()da es in Bezug auf den Stempel am genauesten sein soll.
SamsonTheBrave
@SamsonTheBrave danke für deinen Kommentar - Ich aktualisiere die Antwort
Kamil Kiełczewski
Super, danke für dein Update! Mir ist aufgefallen, dass Sie in Firefox jetzt einen Leistungsunterschied feststellen. Dies könnte ein Ergebnis von Firefox sein, privacy.reduceTimerPrecisiondas die Ergebnisse auf die nächste Millisekunde rundet. Es ist ebenfalls standardmäßig aktiviert, kann aber deaktiviert werden. developer.mozilla.org/en-US/docs/Web/API/Performance/now
SamsonTheBrave
22

Ich kann die Verwendung nur empfehlen moment.js. Führen Sie die folgenden Schritte aus, um die Anzahl der Millisekunden seit der UNIX-Epoche abzurufen

moment().valueOf()

Führen Sie die folgenden Schritte aus, um die Anzahl der Sekunden seit der UNIX-Epoche abzurufen

moment().unix()

Sie können auch Zeiten wie folgt konvertieren:

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

Das mache ich die ganze Zeit. Kein Wortspiel beabsichtigt.

So verwenden Sie es moment.jsim Browser:

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

Weitere Informationen, einschließlich anderer Möglichkeiten zur Installation und Verwendung von MomentJS, finden Sie in den entsprechenden Dokumenten

Voller Stapel
quelle
21

Für einen Zeitstempel mit Mikrosekundenauflösung gibt es performance.now:

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

Dies könnte zum Beispiel ergeben 1436140826653.139, während Date.nownur gibt 1436140826653.

iter
quelle
21

Sie können nur verwenden

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

um den aktuellen Zeitstempel zu erhalten. Sie müssen nichts extra tun.

Jitendra Pawar
quelle
20

Hier ist eine einfache Funktion zum Generieren eines Zeitstempels im Format: mm / tt / jj 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
quelle
10
@ b123400 - Hier ist die Lisp-Version : (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>

blueberry0xff
quelle
16

Alle Browser, die Date.now nicht unterstützen, können Sie verwenden, um die aktuelle Datums- und Uhrzeitangabe abzurufen:

currentTime = Date.now() || +new Date()
mr.boyfox
quelle
3
(Meinen Kommentar umformulieren) Ihr Code hat ein Problem: Er führt die Date.now-Methode aus, anstatt zuerst die Unterstützung zu überprüfen. Bei älteren Browsern führt dies dazu, dass Date.now kein Funktionsfehler ist.
Salman A
Vielleicht wäre eine bessere Alternative, einen ternären Operator zu verwenden, um zu behaupten, dass er Date.nowtatsächlich existiert (und eine Funktion ist), bevor Sie versuchen, ihn aufzurufen : currentTime = typeof Date.now === "function" ? Date.now() : +new Date().
mgthomas99
14

Dieser hat eine Lösung: die Unixtime-Stempel in js konvertiert in js versuchen Sie dies

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

Ich habe neulich aus dem Quellcode von JQuery Cookie eine wirklich coole Art gelernt, ein bestimmtes Date-Objekt in einen Unix-Zeitstempel zu konvertieren .

Hier ist ein Beispiel:

var date = new Date();
var timestamp = +date;
George
quelle
Ich wollte gerade das neue Date () -Objekt schreiben. Sie können das Protokoll (new Date ()) konsolidieren und dann die zugehörigen Methoden unter dem neuen Date () -Objekt / der neuen Date () -Funktion
durchblättern
14

Wenn Sie einen einfachen Weg zum Generieren eines Zeitstempels in Node.js suchen, funktioniert dies gut.

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

Unser Team verwendet dies, um den Cache in einer lokalen Host-Umgebung zu sprengen. Die Ausgabe ist, /dist/css/global.css?v=245521377wo 245521377der Zeitstempel von erzeugt wird hrtime().

Hoffentlich hilft dies, die oben genannten Methoden können auch funktionieren, aber ich fand, dass dies der einfachste Ansatz für unsere Anforderungen in Node.js ist.

Kevin Leary
quelle
13

Das scheint zu funktionieren.

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
quelle
13

Wenn es zu Protokollierungszwecken dient, können Sie ISOString verwenden

new Date().toISOString()

2019-05-18T20: 02: 36.694Z

Cenkarioz
quelle
10

Moment.js kann einen Großteil des Schmerzes im Umgang mit Javascript-Daten abstrahieren.

Siehe: http://momentjs.com/docs/#/displaying/unix-timestamp/

moment().unix();
Rimian
quelle
2
Beachten Sie, dass dies die Anzahl der Sekunden (nicht Millisekunden) seit der UNIX-Epoche angibt. Wenn Sie die Millisekunden möchten, verwenden Sie moment().valueOf(). Siehe meine Antwort.
FullStack
9

Zum Zeitpunkt des Schreibens ist die Top-Antwort 9 Jahre alt, und seitdem hat sich viel geändert - nicht zuletzt haben wir nahezu universelle Unterstützung für eine nicht hackige Lösung:

Date.now()

Wenn Sie absolut sicher sein möchten, dass dies in einem alten Browser (vor ie9) nicht funktioniert, können Sie ihn wie folgt hinter einen Scheck stellen:

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

Dies gibt die Millisekunden seit der Epoche zurück, natürlich nicht Sekunden.

MDN-Dokumentation am Date.now

Olemak
quelle
8

einfacher Weg:

var timeStamp=event.timestamp || new Date().getTime();
Vicky Gonsalves
quelle
Wissen Sie, woher eventkommt. Sie müssen die Art und Weise, wie Sie das Problem lösen, besser erklären, anstatt eine Antwort zu schreiben. Bitte!
Alexventuraio
Ich wollte gerade das neue Date () -Objekt schreiben. Sie können das Protokoll (new Date ()) konsolidieren und dann die zugehörigen Methoden unter dem neuen Date () -Objekt / der neuen Date () -Funktion
durchblättern