2012-09-30 9 views
5

Was ist das maximale und das minimale Datum, das ich mit dem Objekt Date in Javascript verwenden kann?Welche Datumsbereiche sind in Javascript erlaubt?

Ist es möglich, alte historische Daten (wie January 1, 2,500 B.C.) oder Daten, die weit in die Zukunft liegen (wie October 7, 10,000) darzustellen?

Können diese weit entfernten Daten nicht mit dem Objekt Date dargestellt werden, wie soll ich sie darstellen?

+0

Also, was ist der Sinn zu fragen * "Wenn diese weit entfernten Daten nicht dargestellt werden können ..." * wenn Sie bereits wussten, dass sie vertreten sein könnten? Warum stellen Sie die Frage, wenn Sie wissen, dass es strittig ist? : P –

+0

@ user1689607 Ich weiß nicht, die Frage fühlte sich nur unvollständig ohne sie. –

+0

Nun, es war sowieso eine interessante Frage. Gut zu sehen, dass JS das 2038-Problem nicht erleidet. –

Antwort

12

Nach §15.9.1.1 of the ECMA-262 specification,

Zeit in ECMAScript in Millisekunden seit dem 01. Januar gemessen wird, 1970 UTC.
...
Der tatsächliche Bereich, der von ECMAScript Date-Objekten unterstützt wird, ist ... genau -100.000.000 Tage bis 100.000.000 Tage, gemessen relativ zu Mitternacht zu Beginn des 1. Januar 1970 UTC. Dies ergibt eine Reichweite von 8.640.000.000.000.000.000 Millisekunden zu beiden Seiten des 1. Januar 1970 UTC.

So das früheste Datum darstellbare mit dem Date Objekt ist ziemlich weit über die bekannte Geschichte der Menschheit:

new Date(-8640000000000000).toUTCString() 
// Tue, 20 Apr 271,822 B.C. 00:00:00 UTC 

Das späteste Datum ist ausreichend über Y10K und sogar darüber hinaus Y100K dauern, aber muß überarbeitet werden ein paar hundert Jahre vor Y276K.

new Date(8640000000000000).toUTCString() 
// Sat, 13 Sep 275,760 00:00:00 UTC 

Beliebiges Datum außerhalb dieses Bereichs wird Invalid Date zurück.

new Date(8640000000000001) // Invalid Date 
new Date(-8640000000000001) // Invalid Date 

Kurz gesagt, wird der JavaScript Date Typ ausreicht Zeit für die Messgenauigkeit bis Millisekunden innerhalb von etwa 285.616 Jahren vor oder nach dem 1. Januar 1970. Die in der Frage angegebenen Daten liegen sehr komfortabel innerhalb dieses Bereichs.

+0

+1 für die sofortige Referenz-Zitat. –

+0

Ich glaube, das Datum für die Vergangenheit hat einen Tippfehler. Dies ist, was ich new Date (-8640000000000000) .toUTCString() = 'Di, 20. April -271.821 00:00:00 GMT' – Rohit

+0

erhalten die '1' am Ende @Rohit Hinweis. 'neues Datum (-8640000000000001)' ist 'ungültiges Datum', während' neues Datum (-8640000000000000) 'das Datum ist, das du hast, das früheste gültige Datum. –

Verwandte Themen