Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/04/2009, 13:34
Avatar de Erikfrancisco
Erikfrancisco
 
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: validacion de fecha con php

aqui esta la segunda parte de v_fecha.php
Código PHP:
function valida_anio$anio$garabato$color )
{
   
/*-----------Quitamos los espacios que existan al principio, dentro y/o al final de cada uno-----------*/
    /*-------de los parámetros, lo cual ya hicimos en la función valida_fecha y lo repetimos por si--------*/
    /*----------------------------sólo estamos ocupando la función valida_anio-----------------------------*/
   
$anio     suprime_caracteres$anio' ' );
    
$color    suprime_caracteres$color' ' );
   
$garabato suprime_caracteres$garabato' ' );

   if( 
is_int$anio ) ) // Si el año es de tipo entero... lo convertimos a string
       
$anio = (string)$anio;

    
$a_num extraer_letras_y_o_numeros$anio'numeros' ); // Nos aseguramos que año contenga sólo números

   
$a[0] = 1// Marcamos que se encontró un error hasta demostrar lo contrario

    
if( $a_num '10000' && $a_num != '' // Si el año es válido
    
{
        
$a[0] = 0// Indicamos que no se encontro ningún eror

       
switch( strlen$a_num ) )
      {
         case 
'1'// Si se envío sólo un dígito se considerará como años dos mil
            
$a[1] = "200".$a_num;
            break;
         case 
'2':
               if( 
$a_num 69 // Cuando es mayor a 69 se considerará como milnovecientos y algo
                  
$a[1] = "19".$a_num;
               else 
// Cuando es menor ó igual a 69 se considerará como años dos mil
                  
$a[1] = "20".$a_num;
            break;
         case 
'3':
            if( 
substr $a_num0) == // Si el 1er digito = 0 se considera como años dos mil
               
$a[1] = "2".$a_num;
            else 
// si el 1er. dígito es diferente de 0 se considerará como años mil y algo
               
$a[1] = "1".$a_num;
            break;
         default:
               if( 
$a_num != '0000' )
                  
$a[1] = $a_num;
                else 
// Error: No existe el año 0
                
{
                   
$a[0] = 1;
                   
$a[1] = colorea_cadena$a_num$color );
                }
      }
    }
    elseif( 
$a_num >= '10000' && $a_num != '' // Error: El año está fuera del rango permitido
       
$a[1] = colorea_cadena$anio$color );
    elseif( 
$a_num == '' // ERROR: No se encontraron números
    
{
       if( 
$anio == '' )
         
$a[1] = colorea_cadena$garabato.$garabato.$garabato.$garabato$color );
        elseif( 
strlen$anio ) == )
         
$a[1] = colorea_cadena$garabato.$garabato.$garabato.$anio$color );
        elseif( 
strlen$anio ) == )
         
$a[1] = colorea_cadena$garabato.$garabato.$anio$color );
        elseif( 
strlen$anio ) == )
         
$a[1] = colorea_cadena$garabato.$anio$color );
        elseif( 
strlen$anio ) >= 4)
         
$a[1] = colorea_cadena$anio$color );
    }

    return 
$a;
}

function 
valida_fecha$fecha$garabato$tipo 1$color '#FF0000' )
{
   
// Quitamos los espacios que existan al principio, dentro y/o al final de cada uno de los parámetros
   
$fecha    suprime_caracteres$fecha' ' );
   
$garabato suprime_caracteres$garabato' ' );
   
$tipo     suprime_caracteres$tipo' ' );
   
$color    suprime_caracteres$color' ' );

   if( empty( 
$garabato ) && $garabato <> '0' // Si no se envío ningún garabato, asignamos uno por default
      
$garabato '?';
    else
    {
        if( 
strlen$garabato ) > // Nos aseguramos de que $garabato conste de ún sólo caracter
           
$garabato substr$garabato0);
    }

   if( !
ereg'^[1-3]{1}$'$tipo ) ) // ERROR: La variable $tipo no esta dentro del rango permitido.
   
{
      
// Esta variable nos servir para abrir una ventana de alerta
      
$mensaje "
         <script languaje=\"javascript\">
         function alerta()
         {
            msj = 'Amigo(a) programador(a), tuviste un error.\\n\\nEl valor que pusiste al parámetro ';
            msj += '\$tipo en la función\\r de validación es: $tipo, este valor no es válido, ';
            msj += 'por favor\\r corrigelo para poder realizar la validación.';

            alert( msj );
         }
         alerta();
         </script>
      "
;

      
$validada[] = 1;
      
$validada[] = $fecha.$mensaje;

      return 
$validada// Mostramos el ERROR al programador
   
}

   
/*------------Reemplazamos el separador '/' por uno más estandar (digo "estandar" porque es------------*/
    /*-------------------el separador que se pone en MySQL para los campos tipo DATE '-'-------------------*/
   
$fecha str_replace'/''-'$fecha );

   
/*-----------La siguientes 2 variables nos servirán para indicar los dígitos que deverán de------------*/
   /*--------------contener cada una de las partes (día, mes y año) marcadas con otro color---------------*/
   
$d_m colorea_cadena$garabato.$garabato$color );
   
$a   colorea_cadena$garabato.$garabato.$garabato.$garabato$color );

   
/*-------Si la fecha NO contiene guiones medios evaluamos si es de tipo 3 (Marca de tiempo UNIX)-------*/
    /*---------------------------------de lo contrario mostramos el error----------------------------------*/
   
if( !strstr $fecha"-" ) )
   {
      if( empty( 
$fecha ) && $fecha <> '0' // ERROR: Fecha vacía
      
{
         if( 
$tipo == // Si la fecha debe comenzar por día
            
$fecha $d_m."-".$d_m."-".$a;
         elseif( 
$tipo == // Si la fecha debe comenzar por año
            
$fecha $a."-".$d_m."-".$d_m;
            elseif( 
$tipo == // Si la fecha debe ser una marca de tiempo UNIX mínimo son 5 dígitos
            
$fecha colorea_cadena$garabato.$garabato.$garabato.$garabato.$garabato$color );

         
$validada[] = 1;
         
$validada[] = $fecha;

         return 
$validada;
      }
      else
      {
           if( 
$tipo == // Si la fecha que se mando es una marca de tiempo UNIX
            
{
               
$fecha extraer_letras_y_o_numeros$fecha'numeros' ); // Extraemos sólo los números

            // Las marcas de tiempo Unix comienzan desde el 01/01/1970 (5 dígitos)
                // hasta el 18/01/2038 (10 digitos) segun la funcion mktime()
                
if( strlen$fecha ) >= && strlen$fecha ) <= 10 )
                {
                   
$fecha date'Y-m-d'$fecha );
                   if( 
$fecha // Si la fecha es correcta
                    
{
                     
$validada[] = 0;
                  
$validada[] = $fecha;

                  return 
$validada;
                    }
                    else
                    {
                      
$validada[] = 1;
                  
$validada[] = colorea_cadena$fecha$color );

                  return 
$validada;
                    }
                }
                else 
// ERROR: La marca de tiempo UNIX no está dentro del rango permitido
                
{
                   if( 
strlen$fecha ) == )
                       
$fecha colorea_cadena$garabato.$garabato.$garabato.$garabato.$garabato$color );
                   if( 
strlen$fecha ) == )
                       
$fecha colorea_cadena$garabato.$garabato.$garabato.$garabato.$fecha$color );
                    elseif( 
strlen$fecha ) == )
                       
$fecha colorea_cadena$garabato.$garabato.$garabato.$fecha$color );
                    elseif( 
strlen$fecha ) == )
                       
$fecha colorea_cadena$garabato.$garabato.$fecha$color );
                    elseif( 
strlen$fecha ) == )
                       
$fecha colorea_cadena$garabato.$fecha$color );
                    elseif( 
strlen$fecha ) > 10 )
                       
$fecha colorea_cadena$fecha$color );

                   
$validada[] = 1;
               
$validada[] = $fecha;

               return 
$validada;
                }
            }
           elseif( 
$tipo == // Si la fecha debe comenzar por día
         
{
            
$d valida_dia$fecha$garabato$color );
            
$fecha $d[1]."-".$d_m."-".$a;
         }
         elseif( 
$tipo == // Si la fecha debe comenzar por año ($tipo = 2)
         
{
               
$a valida_anio$fecha$garabato$color );
            
$fecha $a[1]."-".$d_m."-".$d_m;
         }

         
$validada[] = 1;
         
$validada[] = $fecha;

         return 
$validada;
      }
   }
   
/*/////////////////////////////////////////////|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/