Data minima e massima


128

Mi chiedevo quale sia la data minima e massima consentita per un Dateoggetto Javascript . Ho scoperto che la data minima è simile al 200000 a.C., ma non sono riuscito a ottenere alcun riferimento al riguardo.

Qualcuno sa la risposta? Spero solo che non dipenda dal browser.

Una risposta in "tempo di epoca" (= millisecondi dal 1970-01-01 00:00:00 UTC + 00) sarebbe la migliore.


Per una copia / incolla risposta: stackoverflow.com/questions/27093130/...
Kieveli

Risposte:


177

Dalle specifiche, § 15.9.1.1 :

Un oggetto Date contiene un numero che indica un particolare istante nel tempo entro un millisecondo. Tale numero è chiamato valore temporale. Un valore di ora può anche essere NaN, a indicare che l'oggetto Date non rappresenta un istante di tempo specifico.

Il tempo è misurato in ECMAScript in millisecondi dal 1 ° gennaio 1970 UTC. Nel tempo i valori dei secondi saltati vengono ignorati. Si presume che ci siano esattamente 86.400.000 millisecondi al giorno. I valori numerici ECMAScript possono rappresentare tutti i numeri interi compresi tra –9.007.199.254.740.992 e 9.007.199.254.740.992; questa gamma è sufficiente per misurare i tempi con precisione in millisecondi per ogni istante entro circa 285.616 anni, avanti o indietro, dal 1 ° gennaio 1970 UTC.

L'intervallo di tempo effettivo supportato dagli oggetti Data ECMAScript è leggermente inferiore: esattamente da –100.000.000 giorni a 100.000.000 giorni misurati rispetto alla mezzanotte all'inizio del 1 ° gennaio 1970 UTC. Ciò fornisce un intervallo di 8.640.000.000.000.000.000 di millisecondi su entrambi i lati del 1 ° gennaio 1970 UTC.

Il momento esatto della mezzanotte all'inizio del 01 gennaio 1970 UTC è rappresentato dal valore +0.

Il terzo paragrafo è il più pertinente. Sulla base di quel paragrafo, possiamo ottenere la prima data precisa per specifica da new Date(-8640000000000000), che è martedì 20 aprile 271.821 a.C. (a.C. = prima dell'era comune , ad esempio l'anno -271.821).


1
Questo ha ispirato un campo isMin isMax come in .net ... gist.github.com/QueueHammer/cb9bf736b81029d65485fb30ad01918d
QueueHammer

1
Quindi è per questo che non funziona con -9223372036854775808L ... Anche dopo averlo modificato fino ad oggi il resever restituisce un valore positivo fuori intervallo.
morto ManN

1
Non so di cosa si lamentino le persone, questo funziona bene per me. A proposito, mi chiedo se c'è qualche modo che funzioni al contrario (cioè inserendo la data BCE e ottenendo i secondi di epoca che sono stati mostrati come int negativi)?
Mark Seagoe,

1
@MarkSeagoe - Date.UTC(-271821, 3, 20)ritorna -8640000000000000. :-)
TJ Crowder,

nuova data ("275760-9-13 05:30:00")
AshTyson

52

Per aumentare la risposta di TJ, il superamento dei valori min / max genera una data non valida.

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 Date


-8

Come puoi vedere, 01/01/1970 restituisce 0, il che significa che è la data più bassa possibile.

new Date('1970-01-01Z00:00:00:000') //returns Thu Jan 01 1970 01:00:00 GMT+0100 (Central European Standard Time)
new Date('1970-01-01Z00:00:00:000').getTime() //returns 0
new Date('1970-01-01Z00:00:00:001').getTime() //returns 1

9
Qual è il punto della tua risposta? Come risponde alla domanda originale?
MaxArt

1/1/1970 non è la data più bassa possibile. Puoi passare un numero negativo per ottenere una data precedente all'1 / 1/1970.
inejwstine,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.