Foros del Web » Programando para Internet » PHP »

Error en calculo entre fechas...

Estas en el tema de Error en calculo entre fechas... en el foro de PHP en Foros del Web. Hola a todos: Tengo un pequeño proiblema con una funcion que calcula el número de años entre dos fechas, la cuestión es que de forma ...
  #1 (permalink)  
Antiguo 06/11/2008, 11:23
Avatar de indy1508  
Fecha de Ingreso: mayo-2007
Ubicación: Monterrey, N.L. México.
Mensajes: 212
Antigüedad: 16 años, 10 meses
Puntos: 0
Pregunta Error en calculo entre fechas...

Hola a todos:

Tengo un pequeño proiblema con una funcion que calcula el número de años entre dos fechas, la cuestión es que de forma local trabaja bien, hace el calculo y arroja el total de años entre las fechas bien, pero al subir la función al servidor ya no calcula bien, si el segundo parametro es menor al año 1970 el resultado me pone -2 y lo suma al otro calculo de la primera fecha, obviamente la cantidad de años es erronea.

Los valores que estoy ocupando son: fecha1 4/11/2008 fecha2 19/10/1939

Esto me arroja una diferencia de 69 años de forma local pero en el servidor la diferencia es de 38 años.

Aqui les muestro el código:

Código PHP:
function resta_fecha($f1,$f2)
    {
        
ereg"([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})"$f1$mifecha);
        
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
        
ereg"([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})"$f2$mifecha2);
        
$lafecha2=$mifecha2[3]."-".$mifecha2[2]."-".$mifecha2[1];
        echo 
'fecha1 de entrada: '.$f1."<BR>";
        echo 
'fecha2 de entrada: '.$f2."<BR>";
        echo 
'dia1: '.$mifecha[1]."<BR>";
        echo 
'mes1: '.$mifecha[2]."<BR>";
        echo 
'año1: '.$mifecha[3]."<BR>";
        echo 
'dia2: '.$mifecha2[1]."<BR>";
        echo 
'mes2: '.$mifecha2[2]."<BR>";
        echo 
'año2: '.$mifecha2[3]."<BR>"
        echo 
'fecha1: '.$lafecha."<BR>";
        echo 
'fecha2: '.$lafecha2."<BR>";
        
        
$epoch_1 mktime(date(H),date(i),0,$mifecha[2],$mifecha[1],$mifecha[3]);
        
$epoch_2 mktime(date(H),date(i),0,$mifecha2[2],$mifecha2[1],$mifecha2[3]);
        
        echo 
'epoch1: '.$epoch_1."<BR>";
        echo 
'epoch2: '.$epoch_2."<BR>";
        
        
$diff_seconds  $epoch_1 $epoch_2;
        
        echo 
'dif de segundos: '.$diff_seconds.' entre: 31556952<BR>';
        
        
$x=$diff_seconds/31556952;
        
        echo 
'total: '.$x."<BR>";

        return 
$x;
    } 
Saludos.
  #2 (permalink)  
Antiguo 06/11/2008, 13:32
Avatar de indy1508  
Fecha de Ingreso: mayo-2007
Ubicación: Monterrey, N.L. México.
Mensajes: 212
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Error en calculo entre fechas...

Nadie comenta?
  #3 (permalink)  
Antiguo 06/11/2008, 13:44
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Error en calculo entre fechas...

Justamente ayer leía esto en el manual: "El rango válido de una marca de tiempo es típicamente de Fri, 13 Dec 1901 20:45:54 GMT a Tue, 19 Jan 2038 03:14:07 GMT. (Estas son las fechas que corresponden a los valores mínimo y máximo para un entero de 32-bits con signo). Sin embargo, antes de PHP 5.1, este rango estaba limitado desde 01-01-1970 a 19-01-2038 en algunos sistemas".

Probablemente la versión de PHP de tu servidor remoto sea vieja y de ahí el problema.

Supongo que lo más fácil sería que trataras las fechas como texto, después de tenerlas en el formato habitual (en lugar de timestamps).

Un saludo.
  #4 (permalink)  
Antiguo 06/11/2008, 14:39
Avatar de indy1508  
Fecha de Ingreso: mayo-2007
Ubicación: Monterrey, N.L. México.
Mensajes: 212
Antigüedad: 16 años, 10 meses
Puntos: 0
Respuesta: Error en calculo entre fechas...

Gracias Deschamps por tu comentario, voy a checar la version en el servidor.

Y me podrias dar un tip para el manejo de las fechas en modo texto?

Saludos.
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 07:04.