Wie erhalte ich einen Zeitstempel in JavaScript?

Lesezeit: 3 Minuten

Benutzer-Avatar
Puppe

Ich möchte eine einzelne Zahl, die das aktuelle Datum und die aktuelle Uhrzeit darstellt, wie a Unix-Zeitstempel.

Benutzer-Avatar
xer0x

Ich mag das, weil es klein ist:

+new Date

Das gefällt mir 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()

  • @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 es wählen new Date().getTime(). Zum Glück ist für mich die schnellere Lösung bereits die lesbare Lösung!

    – Inanutshellus

    8. Juli 2013 um 12:44 Uhr

  • Stimmte mit @FabrícioMatté überein. Das Verhalten unärer Operatoren ist möglicherweise nicht rudimentär, aber wenn Sie es nicht aufgefrischt haben, erwarten Sie nicht, dass Sie in vielen Teams effektiv funktionieren können.

    – Jason T. Featheringham

    18. Juli 2013 um 1:58 Uhr

  • @Niklaus Das liegt daran, dass Sie es mit einer anderen Zeichenfolge verketten. In diesem Fall, new Date().toString() wird genannt.

    – kirb

    2. Oktober 2013 um 11:50 Uhr

  • + ist in diesem Fall unäre Mathematik. typeof (+new Date()) ergibt “number”. Im Grunde ist es eine Abkürzung für new Date().valueOf() – ohne den Javascript-Funktionsaufruf. Aber schreiben Sie es nicht so, es sieht aus wie ein Tippfehler.

    – ansiart

    20. Dezember 2014 um 22:58 Uhr

  • @FelixGagnon-Grenier habe ich hinzugefügt Date.now() weil es jetzt der bevorzugte Weg ist und viele Leute es nicht mögen +new Date. Ich mag, dass Davebs Antwort jetzt beinhaltet +new Dateund erklärt es, aber das war es auch nicht.

    – xer0x

    4. Januar 2017 um 0:15 Uhr

Benutzer-Avatar
Staale

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

time();

Ich stelle in dieser Antwort mehrere Lösungen mit Beschreibungen zur Verfügung. Fühlen Sie sich frei, Fragen zu stellen, wenn etwas unklar ist


Schnelle und schmutzige Lösung:

Date.now() /1000 |0

Warnung: es könnte brechen Sie im Jahr 2038 ein und geben Sie negative Zahlen zurück, wenn Sie dies tun |0 Magie. Verwenden Math.floor() stattdessen bis 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 bekommen Date.now() Arbeiten:

Damit es im IE funktioniert, können Sie dies tun (Polyfill from 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 dies für Daten nach 2038 beachten:

Bitweise Operationen führen zur Verwendung von 32-Bit-Ganzzahlen anstelle von 64-Bit-Gleitkommazahlen.

Sie müssen es richtig verwenden als:

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

Wenn Sie nur die relative Zeit ab dem Zeitpunkt wissen möchten, an dem der Code zum ersten Mal durchlaufen wurde, können Sie Folgendes verwenden:

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

Falls Sie jQuery verwenden, können Sie verwenden $.now() wie beschrieben in jQuerys Dokumente was die Füllwatte seitdem obsolet macht $.now() macht intern das gleiche: (new Date).getTime()

Wenn Sie nur mit der Version von jQuery zufrieden sind, ziehen Sie ein Upvoting in Betracht Dies Antwort, da ich es selbst nicht gefunden habe.


Jetzt eine kleine Erklärung, was |0 tut:

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

Während dieser Konvertierung werden Dezimalstellen entfernt, was zu einem ähnlichen Ergebnis wie bei using führt Math.floor() ausgeben würde.

Seien Sie jedoch gewarnt: Es konvertiert ein 64-Bit-Double in eine 32-Bit-Ganzzahl.
Dies führt beim Umgang mit großen Zahlen zu Informationsverlust.
Zeitstempel werden nach 2038 aufgrund eines 32-Bit-Ganzzahlüberlaufs unterbrochen, es sei denn, Javascript wechselt im strengen Modus zu 64-Bit-Ganzzahlen.


Weitere Informationen zu Date.now folge diesem Link: Date.now() @MDN

Benutzer-Avatar
aemkei

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

1321430cookie-checkWie erhalte ich einen Zeitstempel in JavaScript?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy