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: 22 años, 9 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_num, 0, 1 ) == 0 ) // 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 ) == 1 )
         
$a[1] = colorea_cadena( $garabato.$garabato.$garabato.$anio, $color );
        elseif( 
strlen( $anio ) == 2 )
         
$a[1] = colorea_cadena( $garabato.$garabato.$anio, $color );
        elseif( 
strlen( $anio ) == 3 )
         
$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 ) > 1 ) // Nos aseguramos de que $garabato conste de ún sólo caracter
           
$garabato = substr( $garabato, 0, 1 );
    }

   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 == 1 ) // Si la fecha debe comenzar por día
            
$fecha = $d_m."-".$d_m."-".$a;
         elseif( 
$tipo == 2 ) // Si la fecha debe comenzar por año
            
$fecha = $a."-".$d_m."-".$d_m;
            elseif( 
$tipo == 3 ) // 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 == 3 ) // 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 ) >= 5 && 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 ) == 0 )
                       
$fecha = colorea_cadena( $garabato.$garabato.$garabato.$garabato.$garabato, $color );
                   if( 
strlen( $fecha ) == 1 )
                       
$fecha = colorea_cadena( $garabato.$garabato.$garabato.$garabato.$fecha, $color );
                    elseif( 
strlen( $fecha ) == 2 )
                       
$fecha = colorea_cadena( $garabato.$garabato.$garabato.$fecha, $color );
                    elseif( 
strlen( $fecha ) == 3 )
                       
$fecha = colorea_cadena( $garabato.$garabato.$fecha, $color );
                    elseif( 
strlen( $fecha ) == 4 )
                       
$fecha = colorea_cadena( $garabato.$fecha, $color );
                    elseif( 
strlen( $fecha ) > 10 )
                       
$fecha = colorea_cadena( $fecha, $color );

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

               return 
$validada;
                }
            }
           elseif( 
$tipo == 1 ) // Si la fecha debe comenzar por día
         
{
            
$d = valida_dia( $fecha, $garabato, $color );
            
$fecha = $d[1]."-".$d_m."-".$a;
         }
         elseif( 
$tipo == 2 ) // 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;
      }
   }
   
/*/////////////////////////////////////////////|\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/