Foros del Web » Programando para Internet » PHP »

Problemilla con fechas...

Estas en el tema de Problemilla con fechas... en el foro de PHP en Foros del Web. Hola... He estado leyendo bastante sobre operaciones matemáticas con fechas: sumas, restas, etc. Sin embargo, estoy bloqueado al comparar dos fechas (número de días entre ...
  #1 (permalink)  
Antiguo 10/05/2010, 03:52
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Problemilla con fechas...

Hola...

He estado leyendo bastante sobre operaciones matemáticas con fechas: sumas, restas, etc.

Sin embargo, estoy bloqueado al comparar dos fechas (número de días entre dos fechas) que vienen directamente desde MySQL. PArece ser que el formato debe tener un procedimiento diferente?...

Las fechas tienen el formato ('2010-02-27'), pero no sé cómo hacer para que desde ese formato me arroje los valores que quiera.

Cómo podría hacer, pues una simple operación entre dos fechas para que me arroje los días entre ambas?

Gracias
__________________
Andrew :P
  #2 (permalink)  
Antiguo 10/05/2010, 05:37
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Problemilla con fechas...

OK!... He podido hacer algo a través del método acertar-errar...

Tengo dos fechas con formato MySQL que dejo en dos variables:

Código PHP:
$time1'2010-01-01';
$time2='2010-12-31'
luego les cambio el formato:

Código PHP:
$epoch1 strtotime($time1);
$epoch2 strtotime($time2); 
Y luego las operaciones de resta:
Código PHP:
$diff_seconds $epoch2-$epoch1;
$diff_days floor($diff_seconds/86400);
echo 
"hay <b>".$diff_days."</b> dias.<br><br>";
// Imprime hay 364 dias 
Pero si luego quiero sumarle días a la fecha inicial ($time1) para que me devuelva una fecha concreta, cómo lo puedo hacer?
__________________
Andrew :P
  #3 (permalink)  
Antiguo 10/05/2010, 05:47
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Problemilla con fechas...

Eso es fácil una vez tienes el timestamp (el timestamp de $time1 lo tienes en $epoch1).

El número del timestamp son segundos, por lo tanto tenemos que sumarle segundos, los segundos que tiene un dia

60 x 60 x 24 (eso son los segundos que tiene un día, entonces si quieres sumarle a la fecha inicial 5 dias, solo tienes que hacer:

Código PHP:
$epoch1 strtotime($time1); 
$epoch1 $epoch1 + (60 60 24 5); 
Y ya tendrás la fecha como si hubieran pasado 5 días más.

Un saludo
  #4 (permalink)  
Antiguo 10/05/2010, 06:27
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Problemilla con fechas...

Gracias HeliOs...

Como siempre, acertado en tus respuestas... En las siguientes líneas podréis encontrar el script completo por si os hace falta; de hecho, me resulta muy útil:

Código PHP:
// Los valores llegan de MySQL en el formato de las variables:
$time1'2010-01-01';
$time2='2010-12-31'

// Paso el timestamp para ambas variables:
$epoch1 strtotime($time1);
$epoch2 strtotime($time2); 

// Resto las dos fechas para lo que tengo que partir de la base
// en segundos:
$diff_seconds $epoch2-$epoch1// obtengo 31449600
$diff_days floor($diff_seconds/86400); //obtengo 364

echo "hay <b>".$diff_days."</b> dias entre las dos fechas.<br><br>"
Para sumar días a una fecha determinada, uso el mismo script de arriba añadiendo las siguientes variables:

Código PHP:
$dias_anadir 182// quiere decir, que sumaré  182 desde Enero 1 de 2010

$nueva_fecha $epoch1+(60*60*24*$dias_anadir);
$fechadate('Y-m-d'$nueva_fecha);
$fecha date('D, M jS, Y'strtotime($fecha)); // convierto a formato de lectura

echo "Si sumo ".$dias_anadir." días, a partir de ".$time1.", la nueva fecha sería ".$fecha."."
Saludos y espero que os sirva tanto como a mí.

[POST RESUELTO]
__________________
Andrew :P

Etiquetas: fechas
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 12:16.