Foros del Web » Programación web » PHP »

Cálculo de horas entre fechas

Estas en el tema de Cálculo de horas entre fechas en el foro de PHP en Foros del Web. Hola Me pueden ayudar por favor a hacer un script para calcular en número de horas que hay entre dos fechas, o si está en ...
  #1 (permalink)  
Antiguo 06/12/2005, 12:48
Avatar de Mauri1  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago de Chile
Mensajes: 558
Antigüedad: 12 años
Puntos: 0
Cálculo de horas entre fechas

Hola

Me pueden ayudar por favor a hacer un script para calcular en número de horas que hay entre dos fechas, o si está en alguna parte. La cosa es que tengo dos campos de texto, en los cuales se introducen fecha de inicio y fecha de término para luego ingresar en la base de datos la cantidad de horas que hay entre ellas y así poder poner una barra de porcentaje con estos 3 valores.

Muchas gracias.
  #2 (permalink)  
Antiguo 06/12/2005, 12:51
Avatar de pzin
Moderatoren
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 9.411
Antigüedad: 12 años, 3 meses
Puntos: 1720
Lo único que tendrías que hacer, es pasar las fechas a formato timestamp, luego restarlas, y al final pasarlas de segundos a horas.
__________________
Un cosa es ser político y otra «ser» político.
  #3 (permalink)  
Antiguo 06/12/2005, 13:16
Avatar de Mauri1  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago de Chile
Mensajes: 558
Antigüedad: 12 años
Puntos: 0
Hola BoNeZ. Disculpa, pero yo no entiendo mucho de PHP y nosé como se pasa a formato timestamp, podrías explicarme por favor.

Muchas gracias.
  #4 (permalink)  
Antiguo 06/12/2005, 13:40
Avatar de pzin
Moderatoren
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 9.411
Antigüedad: 12 años, 3 meses
Puntos: 1720
Supongamos que recoges los valores de tus formularios con $_POST['dia1'], $_POST['hora1'], etc... para la primera fecha, y $_POST['dia2'], $_POST['hora2'], etc... para la segunda fecha.

Código PHP:
<?
// Primero pasas las dos fechas, a formato timestamp, con mktime()
$fecha1=mktime($_POST['hora1'],$_POST['minutos1'],$_POST['segundos1'],$_POST['mes1'],$_POST['dia1'],$_POST['anyo1']);
$fecha2=mktime($_POST['hora2'],$_POST['minutos2'],$_POST['segundos2'],$_POST['mes2'],$_POST['dia2'],$_POST['anyo2']);

// Ahora tienes que restar las dos fechas, y así saber cuántos segundos han pasado de una fecha a otra
$segundos=$fecha2-$fecha1;

// Ahora pasas de segundos, a horas
$horas=$segundos/60/60;

// Para imprimir las horas
echo 'Han pasado '.$horas.' desde una fecha a otra.';
?>
Edito: Se supone que la primera fecha, es la mas antigua. Sino, daría como resultado un número negativo de las horas que han pasado entre las fechas.
__________________
Un cosa es ser político y otra «ser» político.
  #5 (permalink)  
Antiguo 06/12/2005, 14:41
Avatar de Mauri1  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago de Chile
Mensajes: 558
Antigüedad: 12 años
Puntos: 0
Genial !!

Muchas gracias BoNeZ
  #6 (permalink)  
Antiguo 02/02/2006, 16:57
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.772
Antigüedad: 11 años, 4 meses
Puntos: 21
como lo haria si la fecha viene de tabla de mysql

Hola BoNeZ digamos que tengo una tabla de mysql que registra
la fecha y hora (2006-2-2 10:10:00)

como haria yo la operacion que acabas de mencionar para calcular las
horas que han pasado con dos fechas asi
$registro=2006-2-2 10:10:00
$actual=date("Y-n-j H:i:s");

como haria yo esa operacion, lo que busco tambien es saber si han paso
24 horas desde la fecha de registro

espero tus comentarios
saludos
__________________
gerardo
  #7 (permalink)  
Antiguo 02/02/2006, 22:36
 
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 663
Antigüedad: 12 años
Puntos: 4
Cita:
Iniciado por BoNeZ
Supongamos que recoges los valores de tus formularios con $_POST['dia1'], $_POST['hora1'], etc... para la primera fecha, y $_POST['dia2'], $_POST['hora2'], etc... para la segunda fecha.

Código PHP:
<?
// Primero pasas las dos fechas, a formato timestamp, con mktime()
$fecha1=mktime($_POST['hora1'],$_POST['minutos1'],$_POST['segundos1'],$_POST['mes1'],$_POST['dia1'],$_POST['anyo1']);
$fecha2=mktime($_POST['hora2'],$_POST['minutos2'],$_POST['segundos2'],$_POST['mes2'],$_POST['dia2'],$_POST['anyo2']);

// Ahora tienes que restar las dos fechas, y así saber cuántos segundos han pasado de una fecha a otra
$segundos=$fecha2-$fecha1;

// Ahora pasas de segundos, a horas
$horas=$segundos/60/60;

// Para imprimir las horas
echo 'Han pasado '.$horas.' desde una fecha a otra.';
?>
Edito: Se supone que la primera fecha, es la mas antigua. Sino, daría como resultado un número negativo de las horas que han pasado entre las fechas.
cuando no se el signo que resultará de la operación y necesito un número positivo, uso valor absoluto ( abs() ).
  #8 (permalink)  
Antiguo 03/02/2006, 05:16
Avatar de forecast  
Fecha de Ingreso: octubre-2004
Mensajes: 259
Antigüedad: 10 años, 1 mes
Puntos: 4
La función strtotime pasa formatos cadena tipo (aaaa-mm-dd) a formato unix con el que podrás trabajar más comodamente.

Te pongo un código que a lo mejor te sirve; un usuario tiene un plazo de vida de x horas de acceso, cada vez que intenta acceder tengo que ver cuando se registro, sumarle el número de horas y ver si se pasa de horas.
Código PHP:
$fecha_hoy=mktime(date("s"),date("i"),date("H"),date("m"),date("d"),date("Y"));
                
$fecha_conhoras=strtotime($fila_pagos_unicos['hora']); //$fila_pagos_unicos['hora'] esto sale de mi BBDD con formato aaaa-mm-dd

Una vez lo tengo en formato Unix me es muy facil sacar los segundosminutos...
$any=date("Y",$fecha_conhoras);
$mes=date("m",$fecha_conhoras);
$dia=date("d",$fecha_conhoras);
$hora=date("H",$fecha_conhoras);
$minuto=date("i",$fecha_conhoras);
$segundo=date("s",$fecha_conhoras);

//construyo una nueva fecha sumando el numero de horas que toque        $fecha_conhoras=mktime($hora+$fila_pagos_unicos['horas_acceso'],$minuto,$dia,$mes,$dia,$any);
if($fecha_hoy>$fecha_conhoras)
{
echo 
"Te pasas de horas nen!!!";

Espero que sea de ayuda.

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 16:49.
SEO by vBSEO 3.3.2