Foros del Web » Programando para Internet » PHP »

Fechas y horas para sumar o restar.

Estas en el tema de Fechas y horas para sumar o restar. en el foro de PHP en Foros del Web. Hola de nuevo, veran me gustaria saber como hacer unas operaciones con fechas/horas en php. En mi base de datos tengo dos campos, FH1 y ...
  #1 (permalink)  
Antiguo 29/09/2012, 11:30
 
Fecha de Ingreso: julio-2012
Mensajes: 138
Antigüedad: 12 años, 4 meses
Puntos: 4
Pregunta Fechas y horas para sumar o restar.

Hola de nuevo, veran me gustaria saber como hacer unas operaciones con fechas/horas en php.


En mi base de datos tengo dos campos, FH1 y FH2.

Para conocer el valor de los campos hago lo siguiente:
Código PHP:
Ver original
  1. $consulta_fechas = "SELECT FH1, FH2 FROM horario WHERE id_fecha = 1 ";
  2.                        
  3. $resul = mysql_query($consulta_fechas);
  4.                        
  5. while($consultSet = mysql_fetch_array($resul)){
  6.                        
  7. echo "Es ".$consultSet['FH1'];
  8. echo "<br/>Es ".$consultSet['FH2'];
  9.                        
  10.                         }

Obviamente me conecto antes a mi base de datos, y hasta ahi todo bien. El resultado me muestra lo siguiente:

Es 2012-09-17 19:08:48
Es 2012-09-17 20:08:48

Bien, hasta aqui.

Pero me gustaria saber cuanto tiempo de diferencia en horas hay entre lo anterior, yo se que es de 1 hora, pero me gustaria sacar esto en php para que se haga con otras fechas que pudiera tener.

He visto algo de que se puede hacer con mktime pero la verdad no se como usarlo, si me gustaria que me explicaran el proceso a fin de entenderlo y poder aplicarlo.

La base de datos no la puedo cambiar, por lo que me seria de gran ayuda saber como hacer eso.

Muchas gracias.!
__________________
Keep learning, someday the knowledge will be your future...
  #2 (permalink)  
Antiguo 29/09/2012, 15:56
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Fechas y horas para sumar o restar.

te presento a la clase DateTime
verifica en este link te aseguro que encontraras, algo, el método es para 5.3 en adelante, pero creo que entre los ejemplos hay uno que esta diseñado para trabajar con versión anterior, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 29/09/2012, 16:46
 
Fecha de Ingreso: agosto-2007
Mensajes: 48
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: Fechas y horas para sumar o restar.

Otra opción es hacerlo desde la propia consulta, si los campos son de tipo DATETIME, algo parecido a esto:

Código PHP:
$consulta_fechas "SELECT FH1, FH2,  (UNIX_TIMESTAMP(FH2)-UNIX_TIMESTAMP(FH1)) AS segundos FROM horario WHERE id_fecha = 1 "
Dentro del while solo tienes que poner $segundos = $consultSet['segundos']; (o la variable que quieras) y tendrás la diferencia en segundos. A Raíz de ahí sacas las horas dividiendo o usando alguna función de PHP (creo que el mktime puede hacerlo a raíz de un valor con solo segundos, pero no soy muy bueno con eso).
  #4 (permalink)  
Antiguo 29/09/2012, 18:12
 
Fecha de Ingreso: julio-2012
Mensajes: 138
Antigüedad: 12 años, 4 meses
Puntos: 4
Respuesta: Fechas y horas para sumar o restar.

Cita:
Iniciado por NoiK Ver Mensaje
Otra opción es hacerlo desde la propia consulta, si los campos son de tipo DATETIME, algo parecido a esto:

Código PHP:
$consulta_fechas "SELECT FH1, FH2,  (UNIX_TIMESTAMP(FH2)-UNIX_TIMESTAMP(FH1)) AS segundos FROM horario WHERE id_fecha = 1 "
Dentro del while solo tienes que poner $segundos = $consultSet['segundos']; (o la variable que quieras) y tendrás la diferencia en segundos. A Raíz de ahí sacas las horas dividiendo o usando alguna función de PHP (creo que el mktime puede hacerlo a raíz de un valor con solo segundos, pero no soy muy bueno con eso).

Gracias por tu respuesta!

Ahora ya pude calcular la diferencia, pero me sale en decimal:

Como puedo hacer que pase de decimal a horas y minutos?

Suponiendo que la operacion en el resultado me dio: 23.833333333333

23 pues son las horas (cabe mencionar que no es en base a las fechas que puse antes).

Como decia tengo 23.833333333333 en donde 23 son las horas y lo restante los minutos pero me gustaria que quedara: 23:xx minutos

¿Como podria hacer la conversion?
__________________
Keep learning, someday the knowledge will be your future...
  #5 (permalink)  
Antiguo 30/09/2012, 03:08
 
Fecha de Ingreso: agosto-2007
Mensajes: 48
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: Fechas y horas para sumar o restar.

Cita:
Iniciado por Loop29 Ver Mensaje
Gracias por tu respuesta!

Ahora ya pude calcular la diferencia, pero me sale en decimal:

Como puedo hacer que pase de decimal a horas y minutos?

Suponiendo que la operacion en el resultado me dio: 23.833333333333

23 pues son las horas (cabe mencionar que no es en base a las fechas que puse antes).

Como decia tengo 23.833333333333 en donde 23 son las horas y lo restante los minutos pero me gustaria que quedara: 23:xx minutos

¿Como podria hacer la conversion?
Con la función floor() redondeas a la baja, que es lo que nos interesa, lo demás son cálculos normales:

Código PHP:
//tenemos la diferencia en segundos
$sec $consultSet['segundos'];

//lo convertimos a horas redondeando siempre a la baja
$horas floor($sec/1200);

//sacamos la diferencia entre las horas obtenidas y los segundos restantes
$min $sec - ($horas*1200);

//obtenemos solo los minutos redondeando a la baja (los segundos que sobren no saldrán)
$min floor($min/60); 
Espero que te sirva!
  #6 (permalink)  
Antiguo 30/09/2012, 09:11
 
Fecha de Ingreso: julio-2012
Mensajes: 138
Antigüedad: 12 años, 4 meses
Puntos: 4
Respuesta: Fechas y horas para sumar o restar.

Muchas gracias a todos, ya acomode las horas y minutos segun las necesidades :)

Saludos!
__________________
Keep learning, someday the knowledge will be your future...
  #7 (permalink)  
Antiguo 30/09/2012, 13:08
 
Fecha de Ingreso: julio-2012
Mensajes: 138
Antigüedad: 12 años, 4 meses
Puntos: 4
Respuesta: Fechas y horas para sumar o restar.

Hola y perdon por preguntar de nuevo, pero estaba revisando y los minutos los muestra diferentes, es decir si tengo 3 horas y 49 minutos, me muestra la ejecucio 3 horas y 9 minutos.

¿Que podria ser? Ya le movi varios lados y nada.

Gracias!
__________________
Keep learning, someday the knowledge will be your future...
  #8 (permalink)  
Antiguo 30/09/2012, 13:10
 
Fecha de Ingreso: julio-2012
Mensajes: 138
Antigüedad: 12 años, 4 meses
Puntos: 4
Respuesta: Fechas y horas para sumar o restar.

Perdon por la pregunta, ya vi porque... no es 1200 sino 3600.

:)
__________________
Keep learning, someday the knowledge will be your future...
  #9 (permalink)  
Antiguo 30/09/2012, 13:14
 
Fecha de Ingreso: agosto-2007
Mensajes: 48
Antigüedad: 17 años, 3 meses
Puntos: 2
Respuesta: Fechas y horas para sumar o restar.

Cita:
Iniciado por Loop29 Ver Mensaje
Perdon por la pregunta, ya vi porque... no es 1200 sino 3600.

:)
Culpa mía, tendré que volver a la ESO para aprender a multiplicar xD. Bueno me alegro que lo hayas solucionado, saludos!
  #10 (permalink)  
Antiguo 16/10/2012, 11:30
 
Fecha de Ingreso: marzo-2012
Ubicación: Bogota
Mensajes: 177
Antigüedad: 12 años, 7 meses
Puntos: 2
Respuesta: Fechas y horas para sumar o restar.

Hola tengo un problema similar a este tengo los campos Hora_inicio y Hora_fin en la bd, esta hora se ingresa en un formulario con una lista despegable que tiene una diferencia de media hora, y quiero calcular la diferencia de tiempo entre Hora_fin y Hora_inicio utilice las dos pociones anteriores pero una no me sirve por que los capos no son date time

me podrían ayudar

Gracias
  #11 (permalink)  
Antiguo 16/10/2012, 11:38
 
Fecha de Ingreso: julio-2012
Mensajes: 138
Antigüedad: 12 años, 4 meses
Puntos: 4
Respuesta: Fechas y horas para sumar o restar.

Amm supongo que tu tienes asi tus horas:
HI: 05:00:00
HF: 13:00:00

¿Ya viste esta pagina?
A lo mejor te sirve, ahi separan las horas, minutos y segundos para posteriormente sumar:
http://www.iremart.es/?p=256

Saludos.!
__________________
Keep learning, someday the knowledge will be your future...
  #12 (permalink)  
Antiguo 16/10/2012, 11:44
 
Fecha de Ingreso: marzo-2012
Ubicación: Bogota
Mensajes: 177
Antigüedad: 12 años, 7 meses
Puntos: 2
Respuesta: Fechas y horas para sumar o restar.

Cita:
Iniciado por Loop29 Ver Mensaje
Amm supongo que tu tienes asi tus horas:
HI: 05:00:00
HF: 13:00:00

¿Ya viste esta pagina?
A lo mejor te sirve, ahi separan las horas, minutos y segundos para posteriormente sumar:
http://www.iremart.es/?p=256

Saludos.!
Si esa pagina ya la había visto pero si la meto dentro del while de mi consulta a la bd, sale un error de la función entonces no se como hacer :(
  #13 (permalink)  
Antiguo 16/10/2012, 12:03
 
Fecha de Ingreso: julio-2012
Mensajes: 138
Antigüedad: 12 años, 4 meses
Puntos: 4
Respuesta: Fechas y horas para sumar o restar.

Por que no pones el codigo para ver como esta el while que dices?
__________________
Keep learning, someday the knowledge will be your future...
  #14 (permalink)  
Antiguo 16/10/2012, 14:47
 
Fecha de Ingreso: marzo-2012
Ubicación: Bogota
Mensajes: 177
Antigüedad: 12 años, 7 meses
Puntos: 2
Respuesta: Fechas y horas para sumar o restar.

Cita:
Iniciado por Loop29 Ver Mensaje
Por que no pones el codigo para ver como esta el while que dices?
Código PHP:
$sql=mysql_query("select Fecha_inicio,Hora_inicio,Cliente,Solicitud,Documentacion,Actividad,Ticket,Fecha_fin,Hora_fin,Ticket_une,Ticket_tercero from formulario  ")
or die (
"problemas en el select".mysql_error());
while(
$row=mysql_fetch_array($sql))
    {
        
$Fecha_inicio=$row['Fecha_inicio'];    
        
$Hora_inicio=$row['Hora_inicio'];
        
$Cliente=$row['Cliente'];
        
//echo $Cliente;
        
$Solicitud=$row['Solicitud'];
        
$Documentacion=$row['Documentacion'];
        
$Actividad=$row['Actividad'];
        
$Ticket=$row['Ticket'];
        
$Fecha_fin=$row['Fecha_fin'];
        
$Hora_fin=$row['Hora_fin'];
        
$Ticket_une=$row['Ticket_une'];
        
$Ticket_tercero=$row['Ticket_tercero'];        
        
        
$Mes substr($Fecha_inicio02);
        
$Año substr($Fecha_inicio66);
        
//echo $Meses."<br>";
        
        
if ($Mes==$Meses){    
function 
restaHoras($Hora_inicio$Hora_fin){

return (
date("H:i:s"strtotime("00:00:00") + strtotime($Hora_fin) - strtotime($horaIni) ));

}
}

hay esta mi código espero me puedan ayudar :)

Etiquetas: horas, mysql
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:10.