Talvés me dirán que este es un post muy antiguo, pero recien lo veo y me sirvio mucho, asi que comparto las mejoras que le hice.
Pues en realidad fue una bobadita, pero que me hizo matar la cabeza un rato, asi que aqui lo comparto.
al final validé que los meses 4-6-9-11 solo tengan 30 dias, que febrero solo 28 y si es bisiesto entonces 29.
Código:
//valida formato yyyy/mm/dd aspirante
function IsNumeric(valor)
{
var log=valor.length;
var sw="S";
for (x=0; x<log; x++)
{
v1=valor.substr(x,1);
v2 = parseInt(v1);
//Compruebo si es un valor numérico
if (isNaN(v2))
{
sw= "N";
}
}
if (sw=="S")
{return true;}
else
{return false;}
}
var primerslap=false;
var segundoslap=false;
function formateafecha(fecha)
{
var long = fecha.length;
var dia;
var mes;
var ano;
ano=fecha.substr(0,4);
if ((long>=4) && (primerslap==false))
{
ano=fecha.substr(0,4);
//alert("akii" + ano);
if ((IsNumeric(ano)== false) || ((ano==0) || (ano<1993) || (ano>1998)))
{
fecha=""; primerslap=false;
}
else
{
fecha=fecha.substr(0,4)+"-"+fecha.substr(5,9); primerslap=true;
}
}
else
{
ano=fecha.substr(0,4);
if (IsNumeric(ano)==false)
{
fecha="";
}
if ((long<=4) && (primerslap=true))
{
fecha=fecha.substr(0,4); primerslap=false;
}
}// fin if ((long>=4) && (primerslap==false))
if ((long>=7) && (segundoslap==false))
{
mes=fecha.substr(5,2);
if ((IsNumeric(mes)==true) &&(mes<=12) && (mes!="00"))
{
fecha=fecha.substr(0,7)+"-"+fecha.substr(8,2); segundoslap=true;
}
else
{
fecha=fecha.substr(0,5);; segundoslap=false;
}
}
else
{
if ((long<=7) && (segundoslap=true))
{
fecha=fecha.substr(0,6); segundoslap=false;
}
}//if ((long>=7) && (segundoslap==false))
if (long>=9)
{
dia=fecha.substr(8,5);
if (IsNumeric(dia)==false)
{
fecha=fecha.substr(0,8);
}
else
{
if (long==10)
{
if ((dia >31) || (dia=="00"))
{
fecha=fecha.substr(0,8);
}
}
}
} //if (long>=7)
if (long>=10)
{
fecha=fecha.substr(0,10);
dia=fecha.substr(8,2);
mes=fecha.substr(5,2);
ano=fecha.substr(0,4);
// Año no biciesto y es febrero y el dia es mayor a 28
//alert(mes);
if ( (ano%4 != 0) && (mes ==02) && (dia > 28) )
{
// desde aqui las correcciones
fecha=fecha.substr(0,8);
}
else
if ((ano%4 == 0) && (mes=="02") && (dia>29))
{
fecha=fecha.substr(0,8);
}
else
if ((mes=="04") || (mes=="06") || (mes=="09") || (mes=="11") && (dia>30))
{
fecha=fecha.substr(0,8);
}
}
return (fecha);
}
Para los que validan dd-mm-aaaa pues solocopien la parte donde comente " // desde aqui las correcciones" y listo.
Espero les sea de utilidad como a mi...