Bueno, siento disentir en tu rango de fechas posibles
frijolerou. Haciendo pruebas me han salido cosas interesantes. Me hice un script para averiguar la fecha más alta capaz de interpretar mi navegador antes de que se devuelva NaN o Invalid Date (IE ó FF). El resultado ha sido que la fecha más alta está en:
Domingo, 13 de Septiembre de 275760, 02:00:00 000
Además, para confirmar el dato he estado buscando información al respecto:
http://www.merlyn.demon.co.uk/js-datex.htm#DRF
Ahí pone que según la especificación ECMA, javascript debe ser capar de manejar hasta 10^8 días después del día cero, esto es, después de 1970-01-01 00:00:00 GMT (no entiendo muy bien que mi límite esté en 2 horas más arriba de 00:00:00, estando en GMT+1... pero sí que me dan exactamente los 100000000 días desde 1970).
Más cosas. El siguiente código me ha funcionado como se espera, se imprime true en IE y en FF:
Código PHP:
var fecha1 = new Date("2000/10/01");
var fecha2 = new Date("6666/66/66");
document.write( (fecha1 < fecha2) );
Si utilizamos 7777/77/77 dará efectivamente false la comparación, pero no porque exista un bug, sino porque el string "7777/77/77" para construir un
Date no es válido (pruébalo y ya verás como la fecha es inválida, sin embargo para "7777/69/77" sí es válido). Al parecer esos strings tienen que soportados por el método
Number Date.parse(string str), que convierte
str en un número, que representa los milisegundos desde la fecha
zero. Ese string
str tiene que estar en formato
IETF, que coordina la manera de escribir una fecha.
Lamentablemente, aunque me he pateado la página web de la organización, no he conseguido hallar nada más que ésto:
Date and Time on the Internet: Timestamps (
su versión HTMLizada más cómoda).
Pero acerca de las fechas mal escritas tipo 6666/66/66 -que el sabio intérprete de javascript consigue ajustar- no he encontrado ningún tipo de norma. Según el documento, una fecha debe estar bien escrita, siguiendo éstas normas:
Cita: date-fullyear = 4DIGIT
date-month = 2DIGIT ; 01-12
date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on
; month/year
time-hour = 2DIGIT ; 00-23
time-minute = 2DIGIT ; 00-59
time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second
; rules
time-secfrac = "." 1*DIGIT
time-numoffset = ("+" / "-") time-hour ":" time-minute
time-offset = "Z" / time-numoffset
partial-time = time-hour ":" time-minute ":" time-second
[time-secfrac]
full-date = date-fullyear "-" date-month "-" date-mday
full-time = partial-time time-offset
date-time = full-date "T" full-time
Que no nos sacan de dudas a la hora de saber que 6666/66/66 funciona y 7777/77/77 no.
Así que seguiremos investigando en qué limites tiene el
Date.parse(), que pueden ser de utilidad conocerlos.
¡Buen hilo
frijolerou!