Foros del Web » Programando para Internet » PHP »

ayuda a detectar errores en funcion...

Estas en el tema de ayuda a detectar errores en funcion... en el foro de PHP en Foros del Web. Gracias X leerlo Amigos estuve con unos problemas al comparar fechas en formato dd/mm/aaaa asi que decidi armar una funcion para este fin la cual ...
  #1 (permalink)  
Antiguo 07/08/2009, 15:06
Avatar de ACX_POISON  
Fecha de Ingreso: abril-2008
Ubicación: Talca-Chile
Mensajes: 750
Antigüedad: 16 años, 7 meses
Puntos: 7
Exclamación ayuda a detectar errores en funcion...

Gracias X leerlo

Amigos estuve con unos problemas al comparar fechas en formato dd/mm/aaaa
asi que decidi armar una funcion para este fin la cual recibe una arreglo con las fechas y devuelva la mayor de ellas y tambien puede devolver todo el array ordenado de menor a mayor.... como recien la arme les pido la pongan a prueba para mejorarla....

Código PHP:
<?php
//array con fechas
 
$fech[0]="28/02/2009";  
 
$fech[1]="28/03/2009";  
 
$fech[2]="28/01/2009"
 
$fech[3]="15/01/2060"
  
echo
"Fecha Mayor::".comparaNfechas($fech)."<br>";//llamo a funcion devuelve fecha
var_dump(comparaNfechas($fech,"/","array"));//devuelve array ordenado de menor a mayor
//************************
//by [email protected]
//07-08-2009
//v.:1.0
//************************
function comparaNfechas($fechas,$separador="/",$devolver="valor")
{
    
//inicializo variables
    
$debugX=false;//si esta TRUE, muestra una serie de mensaje por pantalla
    
$error=false;
    
$devolver=strtolower($devolver);//arreglo para comparar mejor
    
$msj_error="00".$separador."00".$separador."0000";//mensaje a mostrar si fecha mala
    //recorro fechas
    
foreach($fechas as $n =>$valor)
    {
        if(
$debugX){echo"$n -> $valor<br>";}
        
$aux=explode($separador,$valor);
        
//separo en partes la fechas
        
$aux_dia=$aux[0];
        
$aux_mes=$aux[1];
        
$aux_ano=$aux[2];
        if(
$debugX){
        echo 
"dia $aux_dia  mes $aux_mes  ano $aux_ano<br>";}
        if(!
checkdate($aux_mes,$aux_dia,$aux_ano))//compruebo la fecha
        

            if(
$debugX){echo"fecha Errornea";}
            
$error=true;
            break;
        }
        
$F[$valor]=gregoriantojd($aux_mes,$aux_dia,$aux_ano);//cuento los dias
    
}
    if(
$debugX){
        foreach(
$F as $n => $valor)
        {
            echo
"$n -> $valor <br>";
        }
    }
    if(!
$error)
    {
        
asort($F);//ordeno array
        
if($debuX){
        echo
"<br>";
        foreach(
$F as $n => $valor)
        {
            echo
"$n -> $valor <br>";
        }
        }
        
//realizo accion segun el valor a devolver
        
switch ($devolver)
        {
            case 
"valor":
                
end($F);
                
$valor=key($F);//obtengo clave de ultima posicion o mayor fecha
                
return($valor);
                break;
            case 
"array":
                return(
$F);
                break;
            default:
                
end($F);
                
$valor=key($F);
                return(
$valor);
                break;        
        }
    }
    else{return(
$msj_error);}
}
?>
Gracias...
espero sus comentarios y/o sugerencias
__________________
Me junto con los que Saben, Queriendo Saber.
  #2 (permalink)  
Antiguo 07/08/2009, 17:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: ayuda a detectar errores en funcion...

Código PHP:
$foo []= time();
$foo []= '12-34-2007';
$foo []= strtotime('-1 month');

$old 0;
foreach (
$foo as $one)
{
  if (
is_string($one)) $one strtotime($one);
  if (
$one $old$old $one;
}

echo 
date('r'$old); 
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 07/08/2009, 17:20
Avatar de jcxnet  
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 784
Antigüedad: 19 años, 1 mes
Puntos: 56
Respuesta: ayuda a detectar errores en funcion...

Hola,
me demoré un poco porque tenía un error con la función mktime, con la fecha15/01/2060 retornaba false, así que usé una alternativa, espero que te sirva:
Código PHP:
    $fech[]="28/02/2010";
    
$fech[]="15/01/2060";  
    
$fech[]="28/02/2009";  
    
$fech[]="29/03/2009"
     
    
    function 
numFecha($fecha){
    
ereg("([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})"$fecha$date);
        
$val $date[1]+$date[2]*31+$date[3]*365;
        
$date "{$date[3]}-{$date[2]}-{$date[1]}";
        return array (
'num'=>$val,'fecha'=> $date);
    }
    
    function 
ordenaFechas($fechas){
        if(!empty(
$fechas) && is_array($fechas)){
            
$lista = array();            
            foreach(
$fechas as $fecha){
                
$lista[] = numFecha($fecha);
            }
            
array_multisort($lista);
            return 
$lista;
        }else{
            return 
false;
        }
    }
    
    
$orden ordenaFechas($fech);
    
$menor $orden[0];
    
$mayor $orden[count($orden)-1];

    echo 
"<br>La fecha menor es {$menor['fecha']}";
    echo 
"<br>La fecha mayor es {$mayor['fecha']}"
-- fixed --
__________________
►I'm a devil on the run ♂
Jcxnet.com
*Keep It Simple **

Última edición por jcxnet; 07/08/2009 a las 17:38
  #4 (permalink)  
Antiguo 10/08/2009, 09:39
Avatar de ACX_POISON  
Fecha de Ingreso: abril-2008
Ubicación: Talca-Chile
Mensajes: 750
Antigüedad: 16 años, 7 meses
Puntos: 7
Respuesta: ayuda a detectar errores en funcion...

Gracias X las sugerencias
__________________
Me junto con los que Saben, Queriendo Saber.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:12.