Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] sumar horas transcurridas entre dos fecha

Estas en el tema de sumar horas transcurridas entre dos fecha en el foro de PHP en Foros del Web. Estimados, tengo el siguiente necesidad. Estoy sumando la cantidad de horas transcurridas entre una hora de inicio y una de término. El problema es que ...
  #1 (permalink)  
Antiguo 03/07/2015, 08:20
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 8 meses
Puntos: 4
Pregunta sumar horas transcurridas entre dos fecha

Estimados, tengo el siguiente necesidad.

Estoy sumando la cantidad de horas transcurridas entre una hora de inicio y una de término. El problema es que cuando pasan varios días entre esas horas me muestra el resultado en valores negativos. Ejm: -156 minutos , - 883 minutos, etc.

Se que el problema debe producirse por que esas horas están guardadas en un campo Time (solo la hora, sin fecha). En caso de ser ese el problema. ¿Cómo puedo hacer para que muestre la cantidad de horas tomando en cuenta la fecha?

Dejo acá algo del código utilizado.

Siendo los campos:

Código PHP:
Ver original
  1. $hs=$row2['hs'];//hora solicitud
  2. $hc=$row2['hc'];//hora cierre
  3.  
  4.  
  5. $fechas=$row2['fechas'];//fecha de solicitud
  6. $fechac=$row2['fechac'];//fecha de cierre
  7.  
  8.  
  9.  function calcular_tiempo_trasnc($hc,$hs){
  10.             $separar[1]=explode(':',$hc);
  11.             $separar[2]=explode(':',$hs);
  12.  
  13.             $total_minutos_trasncurridos[1] = ($separar[1][0]*60)+$separar[1][1];
  14.             $total_minutos_trasncurridos[2] = ($separar[2][0]*60)+$separar[2][1];
  15.             $total_minutos_trasncurridos = $total_minutos_trasncurridos[1]-$total_minutos_trasncurridos[2];
  16.             if($total_minutos_trasncurridos<=59) return($total_minutos_trasncurridos.' Minutos');
  17.             elseif($total_minutos_trasncurridos>59){
  18.             $HORA_TRANSCURRIDA = round($total_minutos_trasncurridos/60);
  19.             if($HORA_TRANSCURRIDA<=9) $HORA_TRANSCURRIDA='0'.$HORA_TRANSCURRIDA;
  20.             $MINUITOS_TRANSCURRIDOS = $total_minutos_trasncurridos%60;
  21.             if($MINUITOS_TRANSCURRIDOS<=9) $MINUITOS_TRANSCURRIDOS='0'.$MINUITOS_TRANSCURRIDOS;
  22.             return ($HORA_TRANSCURRIDA.':'.$MINUITOS_TRANSCURRIDOS.' Horas');
  23.  
  24.                     }
  25.             }


Hago énfasis en que estoy guardando las fechas y horas por separado

No soy tan experto con el código así que si quieren colaborar con lo que tengo estaré muy agradecido.
  #2 (permalink)  
Antiguo 03/07/2015, 10:48
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: sumar horas transcurridas entre dos fecha

Hola yole,

Hace unos días encontré esta función, la he probado y va bastante bien, además de ser flexible con los datos que introduces.

http://stackoverflow.com/a/676828

Las integras, y con esto te daría el resultado
Código PHP:
// datos a introducir
$dateIni strtotime('2012-02-01 00:00:00');
$dateEnd strtotime('2013-03-02 12:12:12');

// ejecutas la función
$diff _date_diff($dateIni$dateEnd);

// resultados
$diff['y'// año
$diff['m'// mes
$diff['d'// día
$diff['h'// horas
$diff['i'// minutos
$diff['s'// segundos
$diff['invert'// 0 es de - a +
$diff['days'// diferencia en días totales 
Código PHP:
// ...
// si cambias el orden cambiará a 1 en el 'invert'
$diff _date_diff($dateEnd$dateIni);

// resultados
//...
$diff['invert'// 1 es de + a - la diferencia 
Código PHP:
// también admite
$dateIni time();
//... 
Creo que podrías integrarla perfectamente para lo que necesitas.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #3 (permalink)  
Antiguo 03/07/2015, 10:55
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 8 meses
Puntos: 4
Respuesta: sumar horas transcurridas entre dos fecha

OK Uncontroled_Duck, la pruebo y luego te comento. Muchas gracias.
  #4 (permalink)  
Antiguo 03/07/2015, 11:32
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 8 meses
Puntos: 4
Respuesta: sumar horas transcurridas entre dos fecha

Maestro, a raíz de tu posteo encontré justo lo que necesitaba.
Lo comparto también por si a alguien le sirve.
Saludos y gracias.


Código PHP:
Ver original
  1. function format_interval(DateInterval $interval) {
  2.     $result = "";
  3.     if ($interval->y) { $result .= $interval->format("%y years "); }
  4.     if ($interval->m) { $result .= $interval->format("%m months "); }
  5.     if ($interval->d) { $result .= $interval->format("%d days "); }
  6.     if ($interval->h) { $result .= $interval->format("%h hours "); }
  7.     if ($interval->i) { $result .= $interval->format("%i minutes "); }
  8.     if ($interval->s) { $result .= $interval->format("%s seconds "); }
  9.  
  10.     return $result;
  11. }
  12.  
  13. $first_date = new DateTime("2012-11-30 17:03:30");
  14. $second_date = new DateTime("2012-12-21 00:00:00");
  15.  
  16. $difference = $first_date->diff($second_date);
  17.  
  18. echo format_interval($difference);

Etiquetas: fecha, horas
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 23:47.