Ich möchte eine einzelne Zahl, die das aktuelle Datum und die aktuelle Uhrzeit darstellt, wie a Unix-Zeitstempel.
Wie erhalte ich einen Zeitstempel in JavaScript?
Puppe
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 Date
und erklärt es, aber das war es auch nicht.– xer0x
4. Januar 2017 um 0:15 Uhr
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. VerwendenMath.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
aemkei
var timestamp = Number(new Date()); // current time as number