2012-07-17 28 views
87

Me preguntaba cuál es la fecha mínima y máxima permitida para un objeto Javascript Date. Descubrí que la fecha mínima es algo así como 200000 b.C., pero no pude obtener ninguna referencia al respecto.Fecha mínima y máxima

¿Alguien sabe la respuesta? Solo espero que no dependa del navegador.

Una respuesta en "tiempo de época" (= milisegundos desde 1970-01-01 00:00:00 UTC + 00) sería la mejor.

+0

Para una respuesta de copiar/pegar: http://stackoverflow.com/questions/27093130/how-to-get-the-minimum-and-maximum-date – Kieveli

Respuesta

129

De the spec, §15.9.1.1:

un objeto Date contiene un número que indica un instante particular en el tiempo dentro de un milisegundo. Tal Número se llama valor de tiempo. Un valor de tiempo también puede ser NaN, lo que indica que el objeto Date no representa un instante específico de tiempo.

El tiempo se mide en ECMAScript en milisegundos desde el 1 de enero de 1970 UTC. En tiempo, los valores son ignorados. Se supone que hay exactamente 86,400,000 milisegundos por día. Los valores numéricos de ECMAScript pueden representar todos los enteros desde -9,007,199,254,740,992 hasta 9,007,199,254,740,992; este rango es suficiente para medir tiempos de precisión de milisegundos para cualquier instante que esté dentro de aproximadamente 285,616 años, ya sea hacia delante o hacia atrás, desde el 1 de enero de 1970 UTC.

El rango actual de veces admitido por los objetos de fecha de ECMAScript es un poco más pequeño: exactamente -100,000,000 días a 100,000,000 días medidos con respecto a la medianoche del 1 de enero de 1970 UTC. Esto da un rango de 8,640,000,000,000,000 de milisegundos a cada lado del 01 de enero de 1970 UTC.

El momento exacto de la medianoche del 1 de enero de 1970 UTC se representa con el valor +0.

El tercer párrafo es el más relevante. En función de ese párrafo, podemos obtener la fecha más precisa por especificación desde new Date(-8640000000000000), que es el martes 20 de abril de 271,821 BCE (BCE = Antes de Common Era, por ejemplo, el año -271,821).

+8

supongo eso sería suficiente para la mayoría de los casos ... :) –

+62

Ahora espero que alguien no piense que el mundo terminará el 13 de septiembre, 275760 ... – MaxArt

+11

@MaxArt Ese sería mi cumpleaños número 275745, así que espero que no ! –

12

Para aumentar la respuesta de T.J., exceder los valores mínimo/máximo genera una Fecha inválida.

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

Cuestiones relacionadas