javascript - Minsta och största datum
Jag undrade vilken som är det lägsta och högsta datum som är tillåtet för ett Javascript Date-objekt. Jag hittade att det lägsta datumet är något som 200000 f.Kr., men jag kunde inte hitta någon referens om det.
Vet någon svaret? Jag hoppas bara att det inte beror på webbläsaren.
Ett svar i "epoktid" (= millisekunder från 1970-01-01 00:00:00 UTC+00) skulle vara bäst.
Svar #1
Från specen, §15.9.1.1:
Ett Date-objekt innehåller ett tal som anger ett särskilt ögonblick i tiden med noggrannhet till en millisekund. Ett sådant tal kallas ett tidsvärde. Ett tidsvärde kan också vara NaN, vilket indikerar att Date-objektet inte representerar ett specifikt ögonblick i tiden.
Tid mäts i ECMAScript i millisekunder sedan 01 januari 1970 UTC. Hoppssekunder ignoreras i tidsvärden. Det antas att det finns exakt 86 400 000 millisekunder per dag. ECMAScript Number-värden kan representera alla heltal från -9 007 199 254 740 992 till 9 007 199 254 740 992; detta intervall är tillräckligt för att mäta tider med millisekundprecision för varje ögonblick som ligger inom ungefär 285 616 år, framåt eller bakåt, från 01 januari 1970 UTC.
Det faktiska tidsintervallet som stöds av ECMAScript Date-objekt är något mindre: exakt -100 000 000 dagar till 100 000 000 dagar räknat från midnatt vid början av den 01 januari 1970 UTC. Detta ger ett intervall på 8 640 000 000 000 000 millisekunder åt båda sidor om den 01 januari 1970 UTC.
Det exakta ögonblicket av midnatt vid början av 01 januari 1970 UTC representeras av värdet +0.
Det tredje stycket är det mest relevanta. Baserat på det stycket kan vi få det exakta tidigaste datumet enligt specifikationen från new Date(-8640000000000000), vilket är tisdag den 20 april 271 821 f.Kr. (f.Kr.=Före vår tideräkning, t.ex. året -271 821).
Svar #2
För att komplettera T.J.:s svar, genererar överskridande av min/max-värden ett ogiltigt datum.
let maxDate = new Date(8640000000000000);
let minDate = new Date(-8640000000000000);
console.log(new Date(maxDate.getTime()).toString());
console.log(new Date(maxDate.getTime() - 1).toString());
console.log(new Date(maxDate.getTime() + 1).toString()); // Invalid Date
console.log(new Date(minDate.getTime()).toString());
console.log(new Date(minDate.getTime() + 1).toString());
console.log(new Date(minDate.getTime() - 1).toString()); // Invalid DateSvar #3
En liten korrigering av det accepterade svaret; året för det minsta datumet är faktiskt 271,822 f.Kr., som du kan se när du kör följande kodsnutt:
console.log(new Date(-8640000000000000).toLocaleString("en", {"year": "numeric", "era": "short"}))Faktiskt är år -271,821 i själva verket 271,822 f.Kr. eftersom JavaScripts Date (tillsammans med ISO 8601) använder astronomisk årnummerering, som använder ett år noll. Således är år 1 1 e.Kr., år 0 är 1 f.Kr., år -1 är 2 f.Kr., osv.
