Hola:
Me aburría un poco y me ha apetecido hacer una implementación para años bisiestos.
Resulta que este año 2007 no es un año bisiesto, luego 28/02/2007 es válido, pero 29/02/2007 no existe. El 2008 en cambio sí que es bisiesto, y 29/02/2008 sí es válido. Si le sumamos una unidad al año tenemos 29/02/2009, la cual es una fecha inválida. Debería retornar 01/03/2009:
Código:
// redefinimos el método toString del objeto Date para que nos lo ponga bonito
Date.prototype.toString = function(sep) {
var dia = this.getDate();
if(dia<10) dia = "0"+dia;
var mes = this.getMonth()+1;
if(mes<10) mes = "0"+mes;
var anyo = this.getYear();
if(sep==undefined) sep = "/";
return dia+sep+mes+sep+anyo;
}
//nos captura el dia, el mes y el año en un String de formato dd/mm/aaaa
var patronFecha = /^(\d{2})\/(\d{2})\/(\d{4})$/;
// Llamada funcionSumarAnyo(dd/mm/aaaa, dd, mm, aaaa) devuelve una cadena con un año más de la fecha dada. El primer parámetro es omitido
var funcionSumarAnyo = function(todo,dia,mes,anyo) {
mes = parseInt(mes)-1;
anyo = parseInt(anyo)+1;
// new Date(año, mes, día);
var nuevaFecha = new Date(anyo, mes, dia);
return nuevaFecha.toString("/");
}
// 29/02/2008 es válido porque 2008 es bisiesto
var fecha = "29/02/2008";
// si le sumamos un año no debería dar 29/02/2009, eso es inválido. Debería retornar 01/03/2009 que es cuando realmente ha pasao un año.
var nuevaFecha = fecha.replace(patronFecha,funcionSumarAnyo);
document.write( fecha +" más un año es "+nuevaFecha );
No sé si todo esto es necesario, pero venía a cuento con el hilo, y aquí se queda posteado.
Un saludo.