Ver Mensaje Individual
  #11 (permalink)  
Antiguo 28/05/2012, 20:31
Avatar de TheMasterweb
TheMasterweb
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Mascara de fecha en campo input

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...