4843 Stimmen

Wie erhält man einen Zeitstempel in JavaScript?

Etwas Ähnliches wie der Unix-Zeitstempel, d.h. eine einzelne Zahl, die die aktuelle Zeit und das Datum darstellt. Entweder als Zahl oder als String.

0 Stimmen

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());

6043voto

daveb Punkte 70025

Kurz und knackig:

+ new Date()

Ein unärer Operator wie plus löst die valueOf Methode in der Date Objekt und gibt den Zeitstempel zurück (ohne jegliche Änderung).

Einzelheiten:

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

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

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

Um den Zeitstempel in Sekunden können Sie verwenden:

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

Alternativ können Sie auch verwenden:

Date.now() / 1000 | 0

Das dürfte etwas schneller sein, aber auch weniger lesbar.
(auch siehe diese Antwort o ce mit weiteren Erklärungen zu bitweisen Operatoren).

Ich würde die Verwendung von Date.now() (mit Kompatibilitätsunterlage). Es ist etwas besser, weil es kürzer ist und keine neue Date Objekt. Wenn Sie jedoch kein Shim & maximale Kompatibilität wünschen, können Sie die "old"-Methode verwenden, um den Zeitstempel in Millisekunden :

new Date().getTime()

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

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

Und Sie können auch die valueOf Methode, die wir oben gezeigt haben:

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());

15 Stimmen

Falls Sie sich über die Logik der plus Zeichen ist: + wird verwendet als toInt() wobei alle Zeichen vernachlässigt werden und nur Zahlen zurückgegeben werden

0 Stimmen

Oder verwenden Sie ein Online-Tool: magictools.dev/#!/tools/timestamp-to-date

0 Stimmen

Das hat gut funktioniert: stackoverflow.com/a/72047159/8119511

317voto

Daithí Punkte 4507

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 an PHP übergeben, werden die PHP-eigenen Funktionen wahrscheinlich fehlschlagen. Um sicherzugehen, verwende ich daher immer die Sekunden, nicht die Millisekunden.

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

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

Damit erhalten Sie die Millisekunden seit der Epoche (nicht den Unix-Zeitstempel):

var milliseconds = new Date().getTime();

164voto

GottZ Punkte 4558

Ich biete mehrere Lösungen mit Beschreibungen in dieser Antwort. Sie können gerne Fragen stellen, wenn etwas unklar ist


Schnelle und schmutzige Lösung:

Date.now() /1000 |0

Warnung : es könnte im Jahr 2038 abbrechen und negative Zahlen zurückgeben, wenn Sie die |0 Magie. 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 zu erhalten Date.now() arbeiten:

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

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

Wenn Ihnen das Jahr / der Wochentag / die Sommerzeit egal ist, müssen Sie sich dies für Daten nach 2038 merken:

Bitweise Operationen führen zur Verwendung von 32-Bit-Ganzzahlen anstelle von 64-Bit-Fließkommazahlen.

Sie müssen es richtig verwenden, wie:

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

Wenn Sie nur die relative Zeit ab dem Zeitpunkt wissen wollen, an dem der Code zum ersten Mal durchlaufen wurde, könnten Sie so etwas wie dies verwenden:

const relativeTime = (() => {
    const start = Date.now();
    return () => Date.now() - start;
})();

Falls Sie jQuery verwenden, können Sie $.now() wie beschrieben in jQuery-Dokumente was die Polyfill-Funktion überflüssig macht, da $.now() macht intern das Gleiche: (new Date).getTime()

Wenn Sie sich einfach nur über die Version von jQuery freuen, sollten Sie ein Upvoting in Betracht ziehen ce Antwort, da ich sie selbst nicht gefunden habe.


Nun eine kleine Erläuterung, was |0 tut:

Durch die Bereitstellung | weisen Sie den Interpreter an, eine binäre ODER-Operation durchzuführen.
Bitoperationen erfordern absolute Zahlen, die das dezimale Ergebnis von Date.now() / 1000 in eine Ganzzahl umwandeln.

Bei dieser Konvertierung werden die Dezimalstellen entfernt, was zu einem ähnlichen Ergebnis wie bei der Verwendung von Math.floor() ausgeben würde.

Aber seien Sie gewarnt: wird ein 64-Bit-Double in eine 32-Bit-Ganzzahl umgewandelt.
Dies führt zu Informationsverlusten, wenn es um große Zahlen geht.
Zeitstempel werden nach 2038 aufgrund von 32-Bit-Integer-Überlauf abbrechen, es sei denn, Javascript bewegt sich auf 64-Bit-Integer im Strict Mode.


Für weitere Informationen über Date.now folgen Sie diesem Link: Date.now() @ MDN

162voto

Staale Punkte 25764
var time = Date.now || function() {
  return +new Date;
};

time();

103voto

aemkei Punkte 10796
var timestamp = Number(new Date()); // current time as number

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X