Foros del Web » Programando para Internet » PHP »

Sumar/restar fechas mysql/php

Estas en el tema de Sumar/restar fechas mysql/php en el foro de PHP en Foros del Web. Pues mi problema de un principio es sencillo, y es que tengo en mysql 2 campos, una es un datetime (Ej: 2008-09-18 01:39:50) y el ...
  #1 (permalink)  
Antiguo 17/09/2008, 19:06
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Sumar/restar fechas mysql/php

Pues mi problema de un principio es sencillo, y es que tengo en mysql 2 campos, una es un datetime (Ej: 2008-09-18 01:39:50) y el otro es una cantidad en minutos (Ej. 120, equivalente a 2 horas)

El tema es que quiero hacer la suma de los 120 minutos, y ver si es fecha ya ha pasado o aun no, y si no ha pasado cuanto queda


Un saludo, nose si es muy complicado pero no se me ocurre el como
  #2 (permalink)  
Antiguo 17/09/2008, 19:22
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Sumar/restar fechas mysql/php

Lo que sucede es que PHP no tiene funciones que faciliten esa labor, podrías crearlas tú mismo. Bien, no te voy a dar el código ya hecho, sino te voy a decir como tienes que hacerlo. En primer lugar debes conocer el concepto de timestamp o marca de tiempo. Este timestamp es el número de milisegundos transcurridos desde el 1ro de Enero de 1970 hasta la fecha, hasta qué fecha? hasta cualquier fecha. A cada fecha se le puede calcular su timestamp. Bien. Y eso para qué sirve? como se come?

Pues en base a este concepto se deben hacer todas las operaciones de calculos. A ver, por ejemplo:

Si quieres sumar a una fecha 120 minutos. Eso es fácil. Primero debes obtener el timestamp de la fecha en cuestion.

$tmt = mktime($hora, $minuto, $segundo, $mes, $dia, $anio)

No me equivoqué, primero va el mes. Ok, Obviamente la función mktime nos da el timestamp de la fecha en cuestión. Correcto! ahora como hago para sumarle los 120 minutos? Pues fácil, lo sumas nomás, pero tienes que pasarlo a milisegundos ... ajá! ya me acordé de 2ro de primaria que un minuto equivale a 60 segundos, entonces al número de minutos debo multiplicarlo por 60 para que me dé el número de segundos y a eso debo multiplicarlo por 1000 para que me dé el número de milisegundos. Fácil, no?

Entonces tendría esto:

$tmt += 120 * 60 * 1000; // Eso me daría el timestamp de la fecha sumada 120 minutos.

Y ahora para pasarlo a fecha para hacer la comparación? Fácil, solo pásalo.

$fecha = date("Y-m-d H:i:s", $tmt);

Eso te dará la fecha en formato: aaaa-mm-dd H:m:s que es el usuado en MySQL. Bien, ahora qué te falta? pues que apliques lo poco que te enseñé en tu problema. Que dicho de paso no se entiende puntualmente, pero si que es relacionado a comparación entre fechas... Ah, por si acaso ... cómo harías para comparar el tiempo trancurrido entre dos fechas?? Fácil, obtienes el timestamp de cada fecha, lo restas. Y luego obtienes mediante date el número de unidades trancurridas. Si quieres días, usarías esto:

$dias = date("d", $diff)

Para que esto sea entendible revisa las funciones de fecha de PHP. Eso te aclarará el panorama, yo sólo te he hecho ver la manera como se trabaja con diferencias y sumas de fechas.
  #3 (permalink)  
Antiguo 17/09/2008, 22:55
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Sumar/restar fechas mysql/php

Cita:
Este timestamp es el número de milisegundos transcurridos desde el 1ro de Enero de 1970 hasta la fecha
Woah woah woah!!!

¿Que pasa? ¿Milisegundos?

Cita:
Pues fácil, lo sumas nomás, pero tienes que pasarlo a milisegundos
El UNIX Timestamp no es la cantidad de milisegundos. Es la cantidad de SEGUNDOS.
Si lo hace creyendo que es en milisegundos se le va a armar un lío.

TCL_ZIP
Ya que tienes un campo DATETIME en MySQL, es conveniente que uses la funcion strtotime().

$fecha = strtotime($row['fecha']);

Tambien strtotime permite ahcer algo como:

$fecha2 = strtotime("+2 hours");

Ya de ahi es una simple resta y usar la funcion date()
  #4 (permalink)  
Antiguo 18/09/2008, 03:16
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: Sumar/restar fechas mysql/php

El problema que tengo es que la diferencia puede ser:
0 años, 0 meses, 0 dias, 0 horas, 30 minutos, 15 segundos
y al estar fuera del rango de años de 1970, pues me salen cosas raras.

esto es lo que he probado aunque no me funciona, haver si encontrais cual es el fallo:
Código:
$fecha = mktime(date("H")+6,date("i")-$row_mvp_lista['minutos'],date("s"),date("m"),date("d"),date("Y"));
	  $Hora_assassin=strtotime($row_mvp_lista['hora']);
	  $Hora_sale = $row_mvp_lista['minutos']*60;
	  $Hora_sale = $Hora_sale+$Hora_assassin;
	  $diff=$Hora_sale - $fecha;
	  //seg
	  $seg=$diff%60;
	  $diff=$diff/60;
	  //min
	  $Min=$diff%60;
	  $diff=$diff/60;
	  //horas
	  $Horas=$diff%60;
	  $diff=$diff/60;
	  $dias=$diff;
  #5 (permalink)  
Antiguo 18/09/2008, 03:32
Avatar de TCL_ZIP  
Fecha de Ingreso: noviembre-2003
Ubicación: Esporles, Mallorca, España
Mensajes: 690
Antigüedad: 20 años, 5 meses
Puntos: 4
Respuesta: Sumar/restar fechas mysql/php

Solucionado ^^ el codigo es:
Código PHP:
$fecha mktime(date("H")+6,date("i"),date("s"),date("m"),date("d"),date("Y"));
      
$Hora_assassin=strtotime($row_mvp_lista['hora']);
      
$Hora_sale $row_mvp_lista['minutos']*60;
      
$Hora_sale $Hora_sale+$Hora_assassin;
      
$diff=$Hora_sale $fecha;
      
//seg
      
$seg=floor($diff%60);
      
//min
      
$Min=floor($diff/ (60))%60;
      
//horas
      
$Horas=floor($diff/ (60 60))%60;
      
      
$dias=floor($diff / (60 60 24)) ;
      echo  
$dias." dias ".$Horas.":".$Min.":".$seg
Gracias por la ayuda!
  #6 (permalink)  
Antiguo 18/09/2008, 08:17
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Sumar/restar fechas mysql/php

Cita:
Iniciado por Ronruby Ver Mensaje
Woah woah woah!!!

¿Que pasa? ¿Milisegundos?



El UNIX Timestamp no es la cantidad de milisegundos. Es la cantidad de SEGUNDOS.
Si lo hace creyendo que es en milisegundos se le va a armar un lío.

TCL_ZIP
Ya que tienes un campo DATETIME en MySQL, es conveniente que uses la funcion strtotime().

$fecha = strtotime($row['fecha']);

Tambien strtotime permite ahcer algo como:

$fecha2 = strtotime("+2 hours");

Ya de ahi es una simple resta y usar la funcion date()
Tienes razón, es en segundos, que error tan grave he cometido.
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 21:11.