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.
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.
Antworten:
Short & Snazzy:
Ein unärer Operator wie
plus
löst dievalueOf
Methode imDate
Objekt 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:
Um den Zeitstempel in Sekunden zu erhalten , können Sie Folgendes verwenden:
Oder alternativ könnten Sie verwenden:
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 neuesDate
Objekt 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 :Was Sie dann wie folgt in Sekunden umrechnen können:
Sie können auch die oben gezeigte
valueOf
Methode verwenden:Zeitstempel in Millisekunden
quelle
Date.now() / 1000 | 0
Leiden Sie nicht unter dem Problem des Jahres 2038 ?new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
~~(Date.now() / 1000)
Date.now()
+new Data
ist zwar clever, aber für andere Entwickler nicht lesbar.Date.now()
ist klarer und stellt sicher, dass alle anderen wissen, was los ist.Ich mag das, weil es klein ist:
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:
quelle
new Date().getTime()
. Zum Glück ist die schnellere Lösung bereits die lesbare Lösung!new Date().toString()
wird aufgerufen.+
unternimmt der Bediener aus Neugier , um es wie eine Schnur herauszubringen?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):
Dies gibt Ihnen die Millisekunden seit der Epoche (nicht Unix-Zeitstempel):
quelle
Unix timestamp
vsSeconds since the Epoch
. Sollen diese beiden nicht dasselbe bedeuten?quelle
(Date.now||function(){return +new Date})();
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:
Math.floor()
Lösung:Eine nerdige Alternative von Derek 功夫 會 功夫 aus den Kommentaren unter dieser Antwort:
Polyfill zum
Date.now()
Arbeiten:Um es im IE zum Laufen zu bringen, können Sie dies tun (Polyfill von MDN ):
Wenn Sie sich nicht für das Jahr / den Wochentag / die Sommerzeit interessieren, können Sie es entfernen und nach 2038 verwenden:
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:
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
|0
tut:Durch Angabe weisen
|
Sie den Interpreter an, eine binäre ODER-Verknüpfung auszuführen. Bitoperationen erfordern absolute Zahlen, die das Dezimalergebnis vonDate.now() / 1000
in 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.Weitere Informationen finden Sie unter
Date.now
folgendem Link:Date.now()
@ MDNquelle
Date.now()
Referenz: developer.mozilla.org/en-US/docs/JavaScript/Reference/…new Date/1e3|0
.quelle
jQuery bietet eine eigene Methode zum Abrufen des Zeitstempels:
(außerdem implementiert es nur
(new Date).getTime()
Ausdruck)REF: http://api.jquery.com/jQuery.now/
quelle
parseInt
, da der resultierende Wert immer a istNumber
.quelle
+new Date
.. :)Date.now()
Zusätzlich zu den anderen Optionen können Sie eine Datumsformat-ISO direkt abrufen
quelle
new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Um es zusammenzufassen, hier ist eine Funktion, um eine Zeitstempelzeichenfolge in Javascript zurückzugeben. Beispiel: 15:06:38 Uhr
quelle
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:
In MDN wird es wie folgt erwähnt:
Wenn Sie eine Version unter ES5 verwenden,
Date.now();
funktioniert dies nicht und Sie müssen Folgendes verwenden:quelle
Eine habe ich noch nicht gesehen
Eine andere, die ich noch nicht gesehen habe, ist
quelle
Date.now() /1000 |0
tut das gleiche und wurde schon einmal beantwortetMath.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._.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()
.Die
Date.getTime()
Methode kann mit einer kleinen Änderung verwendet werden:Teilen Sie das Ergebnis durch 1000, um
floor
ggf. den Unix-Zeitstempel zu erhalten :Die
Date.valueOf()
Methode ist funktional äquivalent zuDate.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.quelle
new Date().getTime() / 1000
()
danachnew Date
und.getTime()
da/
wird das Date-Objekt sowieso in eine Zahl umgewandelt.Der Code
Math.floor(new Date().getTime() / 1000)
kann auf gekürzt werdennew Date / 1E3 | 0
.Überlegen Sie, den direkten
getTime()
Aufruf zu überspringen und| 0
als Ersatz für dieMath.floor()
Funktion zu verwenden. Es ist auch gut zu bedenken, dass1E3
es sich um ein kürzeres Äquivalent für handelt1000
(Großbuchstabe E wird gegenüber Kleinbuchstaben bevorzugt, um1E3
als Konstante anzugeben ).Als Ergebnis erhalten Sie Folgendes:
quelle
"Math.floor(new Date().getTime()/1000)".length == 37;
"new Date/1E3|0".length == 14;
37 -14 = 23 Bytes;Math.floor()
durch|0
diesen Code "klar und verständlich" macht. Erklären Sie mir, wozu Sie 1 Byte durch Ersetzen1000
durch sparen können1E3
. Das ist lächerlich. Ich sehe schlechten Code.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
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ösungperformance.now()
überraschende Lösung (G) ist mehr als 100-mal schneller als andere Lösungen in Firefox, in Chrome jedoch am langsamstenEinzelheiten
Ergebnisse für Chrom
Sie können HIER einen Test auf Ihrem Computer durchführen
Der in Tests verwendete Code ist im folgenden Snippet dargestellt
Code-Snippet anzeigen
quelle
performance.now()
da es in Bezug auf den Stempel am genauesten sein soll.privacy.reduceTimerPrecision
das 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/nowIch kann die Verwendung nur empfehlen
moment.js
. Führen Sie die folgenden Schritte aus, um die Anzahl der Millisekunden seit der UNIX-Epoche abzurufenFühren Sie die folgenden Schritte aus, um die Anzahl der Sekunden seit der UNIX-Epoche abzurufen
Sie können auch Zeiten wie folgt konvertieren:
Das mache ich die ganze Zeit. Kein Wortspiel beabsichtigt.
So verwenden Sie es
moment.js
im Browser:Weitere Informationen, einschließlich anderer Möglichkeiten zur Installation und Verwendung von MomentJS, finden Sie in den entsprechenden Dokumenten
quelle
Für einen Zeitstempel mit Mikrosekundenauflösung gibt es
performance.now
:Dies könnte zum Beispiel ergeben
1436140826653.139
, währendDate.now
nur gibt1436140826653
.quelle
Sie können nur verwenden
um den aktuellen Zeitstempel zu erhalten. Sie müssen nichts extra tun.
quelle
Hier ist eine einfache Funktion zum Generieren eines Zeitstempels im Format: mm / tt / jj hh: mi: ss
quelle
(new (chain (-date) (to-i-s-o-string)))
.quelle
Alle Browser, die Date.now nicht unterstützen, können Sie verwenden, um die aktuelle Datums- und Uhrzeitangabe abzurufen:
quelle
Date.now
tatsächlich existiert (und eine Funktion ist), bevor Sie versuchen, ihn aufzurufen :currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
.Dieser hat eine Lösung: die Unixtime-Stempel in js konvertiert in js versuchen Sie dies
quelle
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:
quelle
Wenn Sie einen einfachen Weg zum Generieren eines Zeitstempels in Node.js suchen, funktioniert dies gut.
Unser Team verwendet dies, um den Cache in einer lokalen Host-Umgebung zu sprengen. Die Ausgabe ist,
/dist/css/global.css?v=245521377
wo245521377
der Zeitstempel von erzeugt wirdhrtime()
.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.
quelle
Das scheint zu funktionieren.
quelle
Wenn es zu Protokollierungszwecken dient, können Sie ISOString verwenden
new Date().toISOString()
quelle
Für lodash und Unterstreichungs Benutzer, verwenden
_.now
.quelle
Moment.js kann einen Großteil des Schmerzes im Umgang mit Javascript-Daten abstrahieren.
Siehe: http://momentjs.com/docs/#/displaying/unix-timestamp/
quelle
moment().valueOf()
. Siehe meine Antwort.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:
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:
Dies gibt die Millisekunden seit der Epoche zurück, natürlich nicht Sekunden.
MDN-Dokumentation am Date.now
quelle
einfacher Weg:
quelle
event
kommt. Sie müssen die Art und Weise, wie Sie das Problem lösen, besser erklären, anstatt eine Antwort zu schreiben. Bitte!