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

falto esta función porque ta muy larga
v_fecha.php
Código PHP:
<?php
/***********************************************************************************************************
Autor: Erik Francisco Torres Zavala
Fecha de Creación: 01-03-07
Fecha de última Modificación: 27-03-09
Descripción del Archivo: Este archivo contiene funciones para evaluar cada una de las partes de una fecha
                         (día, mes y año) y devuelve un array en el cual el primer valor '[0]' nos indicará
                            con un valor booleano si se encontro un error '1' o no '0' y el segundo valor '[1]'
                            contendrá la fecha con el siguiente formato: aaaa-mm-dd para poder guardarla en
                            una base de datos si es que no se encontró ningún error, de lo contrario, el
                            resultado de la evaluación tendrá como valor la misma fecha enviada pero marcando
                            con un color y en negritas los errores que se encontraron.
                                 
Descripción de Variables: $fecha     OBLIGATORIO  Es la fecha que deseamos validar y dar formato
                          $garabato  OPCIONAL     Es el símbolo que deseamos colocar para marcar los dígitos
                                                       que hacen falta... por default es '?'
                             $tipo      OPCIONAL     Es un número que indica la forma en como le envíamos la
                                                        fecha a la función... por default es '1' y a continuación
                                                        se muestra el formato válido para cada uno de los 3 tipos:
                                 
                                     Formato válido para el tipo '1': (dd/mm/aaaa) ejemplo: 4-ene-5
                                     Formato válido para el tipo '2': (aaaa/mm/dd) ejemplo: 5-1-5
                                         Formato válido para el tipo '3': Marca de tiempo UNIX ejem.: 1104904620

                                                        como se puede observar el separador puede ser '/' ó '-',
                                                        los números pueden ser de una sóla cifra y el mes se puede
                                                        enviar en español ó en ingles de nombre completo o sólo
                                                        los 3 prímeros caracteres
                             $color     OPCIONAL     Es el color que deseamos pintar cada una de las partes de
                                                        la fecha en caso de que se hallan encontrado errores, deve
                                                        ser en formato hexadecial... por default es rojo '#FF0000'
***********************************************************************************************************/

include_once 'funciones_de_cadena.php'// Incluimos las funciones complementarias

function valida_dia$dia$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_dia-----------------------------*/
   
$dia      suprime_caracteres$dia' ' );
   
$garabato suprime_caracteres$garabato' ' );
   
$color    suprime_caracteres$color' ' );

   if( 
is_int$dia ) ) // Si el día es de tipo entero... lo convertimos a string
       
$dia = (string)$dia;

    
$d_num extraer_letras_y_o_numeros$dia'numeros' ); // Nos aseguramos que el día sólo tenga números

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

    
if( $d_num != '0' && $d_num != '' )
    {
       if( 
$d_num '32' // El día es válido
        
{
           if( 
strlen$d_num )  == // Si el día es de un sólo caracter
               
$d[1] = '0'.$d_num;       // concatenamos un cero a la izquierda
            
else
               
$d[1] = $d_num;

         
$d[0] = 0// Indicamos que no se encontró ningún error
        
}
        else 
// ERROR: Sólo existe un máximo de 31 días por mes
        
{
           if( 
strlen$d_num ) == )
               
$d[1] = colorea_cadena$garabato.$d_num$color );
            else
               
$d[1] = colorea_cadena$d_num$color );
        }
    }
   elseif( 
$d_num == '0' // ERROR: No existe ningún día cero '0'
    
{
       if( 
strlen$dia ) == )
          
$d[1] = colorea_cadena$garabato.$dia$color );
        else
          
$d[1] = colorea_cadena$dia$color );
    }
    elseif( 
$d_num == '' // ERROR: Día vacío
    
{
       if( 
$dia == '' )
         
$d[1] = colorea_cadena$garabato.$garabato$color );
        elseif( 
strlen$dia ) == )
         
$d[1] = colorea_cadena$garabato.$dia$color );
        elseif( 
strlen$dia ) >= )
         
$d[1] = colorea_cadena$dia$color );
    }

    return 
$d;
}

function 
valida_mes$mes$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_mes-----------------------------*/
   
$mes      suprime_caracteres$mes' ' );
   
$garabato suprime_caracteres$garabato' ' );
   
$color    suprime_caracteres$color' ' );

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

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

   
if( !empty( $mes ) && $mes != '0' // Si se ingresaron datos
   
{
       
$m_int extraer_letras_y_o_numeros$mes'numeros' ); // Extraemos sólo números

        
if( $m_int != && $m_int != '' // Si el día es un número
        
{
           
$mes $m_int;

           if( 
$mes <= 12 )
            {
               if( 
strlen$mes ) == // Si el mes es de 1 caracter le concatenamos un 0 a la izquierda
               
$mes "0".$mes;

                
$m[0] = 0// Indicamos que no se encontró ningún error
                
$m[1] = $mes;
            }
         else 
// ERROR: El mes enviado esta fuera del rango permitido
            
$m[1] = colorea_cadena$mes$color );
        }
      else 
// Si el día no es un número evaluaremos al mes como texto
      
{
            
$mes strtoupper$mes ); // Comvertimos el valor del mes enviado a Mayúsculas
          
$mes extraer_letras_y_o_numeros$mes'letras' ); // Extraemos sólo letras

         // Creamos arreglos para los meses válidos incluidos los nombres en ingles
         
$m_esp = array( 'ENERO''FEBRERO''MARZO''ABRIL''MAYO''JUNIO',
                           
'JULIO''AGOSTO''SEPTIEMBRE''OCTUBRE''NOVIEMBRE''DICIEMBRE' );
         
$m_ing = array( 'JANUARY''FEBRUARY''MARCH''APRIL''MAY''JUNE',
                           
'JULY''AUGUST''SEPTEMBER''OCTOBER''NOVEMBER''DECEMBER' );

         
// Comparamos los valores del array con el valor del mes enviado para saber el número de mes
         
for( $e 0$e count$m_esp ); $e++ )
         {
               
$m3s substr$m_esp[$e], 0); // Extraemos las 3 primeras letras del mes en español
                
$m3e substr$m_ing[$e], 0); // Extraemos las 3 primeras letras del mes en ingles

            
if( $m_esp[$e] == $mes || $m3s == $mes || $m_ing[$e] == $mes || $m3e == $mes // Si es válido
            
{
               
$mes $e 1// Sumamos una unidad al mes porque los array comienzan desde la posición 0

               
if( $mes 10 // Si el tamaño del mes es de 1 dígito concatenamos un 0 a la izquierda
                  
$mes "0".$mes;

               
$m[0] = 0// Indicamos que no se encontró ningún error
                    
$m[1] = $mes;
               break; 
// Dejamos de comparar porque si llegamos hasta aqui significa que el mes si es válido
            
}
         }

         if( 
$m[0] == // Si el mes enviado no es igual a alguno de los meses válidos lo marcamos
            
{
               if( 
strlen$mes ) == )
               
$m[1] = colorea_cadena$garabato.$garabato$color );
               elseif( 
strlen$mes ) == )
               
$m[1] = colorea_cadena$garabato.$mes$color );
                elseif( 
strlen$mes ) >= )
               
$m[1] = colorea_cadena$mes$color );
            }
      }
   }
    elseif( 
$mes == '0' // ERROR: No existe ningún mes 0
   
{
       if( 
strlen$mes ) == )
         
$m[1] = colorea_cadena$garabato.$mes$color );
        elseif( 
strlen$mes ) >= )
         
$m[1] = colorea_cadena$mes$color );
   }
   elseif( empty( 
$mes ) && $mes <> '0' // ERROR: Campo vacio
      
$m[1] =  colorea_cadena$garabato.$garabato$color );

   return 
$m;
}