Holen Sie sich die Epoche für ein bestimmtes Datum mit Javascript

Antworten:

176

Sie können ein DateObjekt erstellen und es aufrufen getTime:

new Date(2010, 6, 26).getTime() / 1000
Michael Mrozek
quelle
12
Das Monatsargument für den Datumskonstruktor weist keine gewisse Konsistenz auf und basiert tatsächlich auf Null. Dies bedeutet, dass 7 August ist, also müssen Sie 1 subtrahieren :-)
Andy E
6
@Andy - es ist eine verrückte Idee, Monate um -1 zu versetzen, während der Rest erhalten bleibt, und genau das kann ein Space Shuttle verrückt machen, wenn dort jemals JavaScript verwendet wird :)
Anurag
6
Wahrscheinlich besser: neues Datum ("2010-7-26"). GetTime () / 1000, damit Sie nicht über Offsets nachdenken müssen.
Vincent McNabb
5
@ Vincent: new Date("2010-7-26")Wird im Internet Explorer nicht analysiert. Datum Konstruktor beruht auf der Date.parse () Methode , wenn ein String übergeben wird, die abhängig von der Implementierung in ECMA-262 3. Auflage ist und, als Folge, notorisch unflexibel im Internet Explorer.
Andy E
Man könnte mögliche Fehler oder Missverständnisse bei der Angabe der Zeitzone minimieren. Zumindest die aktuellen (Linux-) Versionen von Firefox, Opera und Chrome unterstützen das Instanziieren eines JavaScript-Datums wie das neue Datum ("1. Januar 1970 GMT + 00: 00, 00:01"). Dies verringert auch die Verwirrung über das richtige Monatsformat.
Michael Besteck
37
new Date("2016-3-17").valueOf() 

wird eine lange Epoche zurückkehren

Jyo Banerjee
quelle
2

Sie können auch die Funktion Date.now () verwenden.

Neha M.
quelle
0
Number(new Date(2010, 6, 26))

Funktioniert genauso wie oben. Wenn Sie Sekunden brauchen, vergessen Sie nicht/ 1000

Andrii Los
quelle
0

Einige Antworten erklären nicht die Nebenwirkungen von Variationen in der Zeitzone für das JavaScript-Datumsobjekt. Sie sollten diese Antwort daher in Betracht ziehen, wenn Sie diesbezüglich Bedenken haben.

Methode 1: Zeitzonenabhängig der Maschine

Standardmäßig gibt JavaScript ein Datum unter Berücksichtigung der Zeitzone getTime()des Computers zurück , sodass das Ergebnis von Computer zu Computer unterschiedlich ist. Sie können dieses Verhalten überprüfen:

new Date(1970, 0, 1, 0, 0, 0, 0).getTime()
    // Since 1970-01-01 is Epoch, you may expect ZERO
    // but in fact the result varies based on computer's timezone

Dies ist kein Problem, wenn Sie die Zeit seit der Epoche unter Berücksichtigung Ihrer Zeitzone wirklich nutzen möchten. Wenn Sie also seit der Epoche Zeit für das aktuelle Datum oder sogar ein bestimmtes Datum basierend auf der Zeitzone des Computers erhalten möchten , können Sie diese Methode weiterhin verwenden.

// Seconds since Epoch (Unix timestamp format)

new Date().getTime() / 1000             // local Date/Time since Epoch in seconds
new Date(2020, 11, 1).getTime() / 1000  // time since Epoch to 2020-12-01 00:00 (local timezone) in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

new Date().getTime()                    // local Date/Time since Epoch in milliseconds
new Date(2020,  0, 2).getTime()         // time since Epoch to 2020-01-02 00:00 (local timezone) in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

Methode 2: Zeitzonenunabhängig der Maschine

Wenn Sie jedoch Variationen in der Zeitzone abrufen und die Zeit seit der Epoche für ein bestimmtes Datum in UTC (dh zeitzonenunabhängig) abrufen möchten , müssen Sie die Date.UTCMethode verwenden oder das Datum von Ihrer Zeitzone auf UTC verschieben:

Date.UTC(1970,  0, 1)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()  // difference in milliseconds between your timezone and UTC
    (new Date(1970,  0, 1).getTime() - timezone_diff)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

Wenn Sie diese Methode verwenden (oder alternativ die Differenz subtrahieren), sollte das Ergebnis sein:

// Seconds since Epoch (Unix timestamp format)

Date.UTC(2020,  0, 1) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds
    (new Date(2020, 11, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-12-01 00:00 UTC in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

Date.UTC(2020,  0, 2)   // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 2).getTime() - timezone_diff)         // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

IMO, wenn Sie nicht wissen, was Sie tun (siehe Hinweis oben), sollten Sie Methode 2 bevorzugen , da sie maschinenunabhängig ist.


Endnote

Obwohl die Empfehlungen in dieser Antwort und da Date.UTCsie nicht ohne ein bestimmtes Datum / eine bestimmte Uhrzeit funktionieren, neigen Sie möglicherweise dazu, den alternativen Ansatz zu verwenden und Folgendes zu tun:

const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date().getTime() - timezone_diff)  // <-- !!! new Date() without arguments
    // means "local Date/Time subtracted by timezone since Epoch" (?)

Dies macht keinen Sinn und ist wahrscheinlich FALSCH (Sie ändern das Datum). Seien Sie sich bewusst, dass Sie dies nicht tun. Wenn Sie die Zeit seit der Epoche vom aktuellen Datum und der aktuellen Uhrzeit abrufen möchten , sind Sie mit Methode 1 höchstwahrscheinlich in Ordnung .

Diego Queiroz
quelle
0

Date.parse()Die Methode analysiert eine Zeichenfolgendarstellung eines Datums und gibt die Anzahl der Millisekunden seitdem zurück January 1, 1970, 00:00:00 UTC.

const unixTimeZero = Date.parse('01 Jan 1970 00:00:00 GMT');
const javaScriptRelease = Date.parse('04 Dec 1995 00:12:00 GMT');

console.log(unixTimeZero);
// expected output: 0

console.log(javaScriptRelease);
// expected output: 818035920000

Weitere Informationen finden Sie unter: Date.parse ()

Sourabh
quelle