Wie erhalte ich mit Javascript das aktuelle Datum oder/und die Uhrzeit in Sekunden?
So erhalten Sie das aktuelle Datum und/oder die Uhrzeit in Sekunden
Hagelholz
Tim Montag
Verwenden new Date().getTime() / 1000
ist eine unvollständige Lösung zum Erhalten der Sekunden, da es Zeitstempel mit Gleitkommaeinheiten erzeugt.
new Date() / 1000; // 1405792936.933
// Technically, .933 would be in milliseconds
Verwenden Sie stattdessen:
Math.round(Date.now() / 1000); // 1405792937
// Or
Math.floor(Date.now() / 1000); // 1405792936
// Or
Math.ceil(Date.now() / 1000); // 1405792937
// Note: In general, I recommend `Math.round()`,
// but there are use cases where
// `Math.floor()` and `Math.ceil()`
// might be better suited.
Außerdem sind Werte ohne Gleitkommazahlen sicherer für bedingte Anweisungen, da die mit Gleitkommazahlen erzielte Granularität zu unerwünschten Ergebnissen führen kann. Zum Beispiel:
if (1405792936.993 < 1405792937) // true
Warnung: Bitweise Operatoren können Probleme verursachen, wenn sie zum Bearbeiten von Zeitstempeln verwendet werden. Zum Beispiel, (new Date() / 1000) | 0
kann auch verwendet werden, um den Wert in Sekunden zu „unterteilen“, dieser Code verursacht jedoch die folgenden Probleme:
- Standardmäßig sind Javascript-Zahlen vom Typ 64-Bit-Floats (doppelte Genauigkeit), und bitweise Operatoren konvertieren diesen Typ implizit in vorzeichenbehaftete 32-Bit-Ganzzahlen. Der Typ sollte wohl nicht implizit vom Compiler konvertiert werden, sondern der Entwickler sollte die Konvertierung bei Bedarf vornehmen.
- Der vom bitweisen Operator erzeugte vorzeichenbehaftete 32-Bit-Integer-Zeitstempel bewirkt die Jahr 2038 Problem wie in den Kommentaren erwähnt.
-
Stimme voll und ganz zu 👍 Verwenden
Math.round(new Date() / 1000)
– gdibble
6. Oktober 2018 um 21:20 Uhr
-
Beachten Sie, dass Flooring mit dem bitweisen Operator dazu führt, dass der Wert in eine vorzeichenbehaftete 32-Bit-Ganzzahl umgewandelt wird. Sehen Jahr 2038 Problem.
– Ryan
21. September 2021 um 17:29 Uhr
-
@Ryan – danke, ich habe meine Antwort aktualisiert, um die Verwendung von zu unterbinden
| 0
– tim-montague
22. September 2021 um 22:07 Uhr
-
warum
Math.round
anstattMath.floor
/Math.trunc
?– André Figueiredo
6. Dezember 2021 um 19:48 Uhr
-
@AndreFigueiredo – Vielen Dank für diese Beispiele. Die Lösung, die ich bereitgestellt habe, war für die Frage “Wie bekomme ich das aktuelle Datum/die aktuelle Uhrzeit in Sekunden in Javascript?”, sodass Ihr Beispiel in Stunden nicht im Kontext steht, aber ich denke, Ihre Beispiele in Sekunden haben eine gewisse Gültigkeit. Im Allgemeinen denke ich immer noch
Math.round()
ist das Beste. Aber ja, ich stimme zu, dass es Anwendungsfälle gibt, in denen es nicht am besten ist, undMath.floor()
undMath.ceil()
sind angemessener. Ich habe meine Antwort aktualisiert, um dasselbe zu bemerken.– tim-montague
9. Dezember 2021 um 3:47 Uhr
-
Diese Antwort für Millisekunden beantwortet nicht einmal die Frage, die gestellt wurde. „Wie erhalte ich das aktuelle Datum/die aktuelle Uhrzeit in Sekunden“
– tim-montague
17. August 2020 um 21:53 Uhr
-
Date.now() / 1000
um die Frage selbst zu beantworten– Zauberer11
24. August 2021 um 8:48 Uhr
-
@magier11 –
Date.now() / 1000
beantwortet die Frage auch nicht, weil es Werte mit Teilbrüchen in Millisekunden angibt– tim-montague
28. September 2021 um 7:30 Uhr
-
Math.floor(Date.now()/1000)
– Daniel Wu
31. März um 3:34 Uhr
Ich benutze das:
Math.round(Date.now() / 1000)
Keine Notwendigkeit für die Erstellung neuer Objekte (siehe doc Date.now())
Gemeinschaft
So erhalten Sie die heutigen Gesamtsekunden des Tages:
getTodaysTotalSeconds(){
let date = new Date();
return +(date.getHours() * 60 * 60) + (date.getMinutes() * 60) + date.getSeconds();
}
Ich habe hinzufügen +
im Gegenzug welche Rückkehr in int
. Dies kann anderen Entwicklern helfen. 🙂
Константин Ван
Diese JavaScript-Lösungen geben Ihnen die Millisekunden oder die Sekunden seit dem 1. Januar 1970, Mitternacht, an.
Die IE 9+-Lösung (IE 8 oder die ältere Version unterstützt dies nicht.):
var timestampInMilliseconds = Date.now();
var timestampInSeconds = Date.now() / 1000; // A float value; not an integer.
timestampInSeconds = Math.floor(Date.now() / 1000); // Floor it to get the seconds.
timestampInSeconds = Date.now() / 1000 | 0; // Also you can do floor it like this.
timestampInSeconds = Math.round(Date.now() / 1000); // Round it to get the seconds.
Um weitere Informationen zu erhalten Date.now()
: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now
Die generische Lösung:
// ‘+’ operator makes the operand numeric.
// And ‘new’ operator can be used without the arguments ‘(……)’.
var timestampInMilliseconds = +new Date;
var timestampInSeconds = +new Date / 1000; // A float value; not an intger.
timestampInSeconds = Math.floor(+new Date / 1000); // Floor it to get the seconds.
timestampInSeconds = +new Date / 1000 | 0; // Also you can do floor it like this.
timestampInSeconds = Math.round(+new Date / 1000); // Round it to get the seconds.
Seien Sie vorsichtig bei der Verwendung, wenn Sie so etwas nicht möchten.
if(1000000 < Math.round(1000000.2)) // false.
-
Hallo, jüngeres Ich. Wie geht es Ihnen?
– Константин Ван
21. Mai 2021 um 16:37 Uhr
Mögliches Duplikat von Wie erhalten Sie einen Zeitstempel in JavaScript?
– GottZ
25. April 2016 um 15:34 Uhr
Beachten Sie, dass die akzeptierte Antwort eine Fließkommazahl ergibt.
– e18r
5. April 2018 um 1:05 Uhr