Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Sumar Horas, Minutos y Segundos !!!

Estas en el tema de Sumar Horas, Minutos y Segundos !!! en el foro de PHP en Foros del Web. Antes que pregunten ya vi varios temas http://www.forosdelweb.com/f18/como-...gundos-634876/ http://www.forosdelweb.com/f18/sumar...oblema-358164/ http://www.forosdelweb.com/f96/sumar...0-seg-1119422/ http://www.forosdelweb.com/f18/como-...nutos-1010080/ Pero el problema es que en la mayoría de los temas trabajan con datos ...
  #1 (permalink)  
Antiguo 31/03/2017, 10:50
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Sumar Horas, Minutos y Segundos !!!

Antes que pregunten ya vi varios temas
http://www.forosdelweb.com/f18/como-...gundos-634876/
http://www.forosdelweb.com/f18/sumar...oblema-358164/
http://www.forosdelweb.com/f96/sumar...0-seg-1119422/
http://www.forosdelweb.com/f18/como-...nutos-1010080/

Pero el problema es que en la mayoría de los temas trabajan con datos time, en mi caso cada campo es un int.

Es para una tabla de permisos, en donde el empleado al momento de llenar solo pone cuantos días, horas o minutos necesita, hay un textbox para cada opción. A manera de ejemplo tengo 28 permisos y sus respectivas sumas en X rango de tiempo, Ojo recuerden que son campos separados e independientes.
Suma de los días = 10
Suma de las Horas = 49
Suma de los minutos = 404

A mi calculo hecho en "calculadora" me salen 12 días, 7 horas y 44 minutos

1- Quiero que me ayuden a comprobar si esa suma es la correcta
2- Quiero hacer un código php que me saque ese dato (hace muchisimos años hice un reloj en DFD, creo que es la misma lógica que se debe usar, por cada 24 horas sumar un dia, por cada 60 minutos sumar una hora) pero mis neuronas no dan para mas. En los post arriba mencionados veo que utilizan el %, si no me equivoco ese es el famoso rand o residuo, pero igual se debe hacer en ciclos, y créanme que no me da la cabeza ahorita

Solo una idea necesito para hacerlo, si es que no tienen el tiempo suficiente para una respuesta completa

PD: en mi departamento, el jefe y un compañero alegan que son 12 días con 32 minutos, todo porque al convertir los
10 días en minutos son 14400
49 horas en minutos son 2940
y la suma final de los 404 minutos
Todo eso da un gran total de 17744 minutos que ellos dividen primero entre 60 y luego entre 24 y el resultado es 12.32 incluso google tira ese resultado, ayúdenme a darles por la cara a estos dos

Gracias
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #2 (permalink)  
Antiguo 31/03/2017, 11:27
 
Fecha de Ingreso: octubre-2009
Mensajes: 305
Antigüedad: 14 años, 6 meses
Puntos: 29
Respuesta: Sumar Horas, Minutos y Segundos !!!

una cosa es no saber y otra floreja por no aprenderlo, basta con las clases de DateTime de php para hacer todo eso
  #3 (permalink)  
Antiguo 31/03/2017, 11:48
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Sumar Horas, Minutos y Segundos !!!

Pregunto... ¿no sería lo mismo obtener la diferencia entre dos fechas (incluyendo tiempo)?

Lo pregunto por el siguiente código:
Código PHP:
Ver original
  1. $date1 = new DateTime("2009-10-11 14:52:26");
  2. $date2 = new DateTime("2010-10-25 21:29:00");
  3.  
  4. $interval = date_diff($date1, $date2);
  5. echo $interval->format('%R%a días %H horas %I minutos %S segundos');
  6.  
  7. # Eso te imprime "+379 días 06 horas 36 minutos 34 segundos"

Como dices que lo tienes en diferentes campos cada datos, simplemente recupera la fecha iniciall y los ajuntas para pasarselo al objeto DateTime, y lo mismo para la fecha final.

Dime a ver si eso te ayudó...
  #4 (permalink)  
Antiguo 31/03/2017, 12:08
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Sumar Horas, Minutos y Segundos !!!

Cita:
Iniciado por sustentio Ver Mensaje
una cosa es no saber y otra floreja por no aprenderlo, basta con las clases de DateTime de php para hacer todo eso
Error, si no quisiera hacerlo pediría código, yo pido ideas y vuelve a lo mismo, trabajar con tiempos, yo no quiero trabajar con tiempos quiero hacerlo con numero enteros.

Averigüe un poco mas del % que es el residuo y tengo esto
Código PHP:
Ver original
  1. <?php
  2.   // La cantidad de minutos es la suma que ya tengo de dividir los días y horas a minutos
  3.     $min = 17744;
  4.     //obtener segundos
  5.     $sec = $min * 60;
  6.     //dias es la division de n segs entre 86400 segundos que representa un dia
  7.     $dias=floor($sec/86400);
  8.     echo $dias.'<br>'; // Es igual a 12
  9.     //mod_hora es el sobrante, en horas, de la division de días;
  10.     $mod_hora=$sec%86400;
  11.     //hora es la division entre el sobrante de horas y 3600 segundos que representa una hora;
  12.     $horas=floor($mod_hora/3600);
  13.     echo $horas.'<br>'; // Es igual a 7
  14.     //mod_minuto es el sobrante, en minutos, de la division de horas;
  15.     $mod_minuto=$mod_hora%3600;
  16.     //minuto es la division entre el sobrante y 60 segundos que representa un minuto;
  17.     $minutos=floor($mod_minuto/60);
  18.     echo $minutos.'<br>'; // Es igual a 44
  19. ?>

La respuesta final de este script es 12 días 7 horas y 44 minutos creo que no estoy tan mal.


Cita:
Iniciado por Triby2 Ver Mensaje
Pregunto... ¿no sería lo mismo obtener la diferencia entre dos fechas (incluyendo tiempo)?

Lo pregunto por el siguiente código:
[HIGHLIGHT="PHP"]
$date1 = new DateTime("2009-10-11 14:52:26");
$date2 = new DateTime("2010-10-25 21:29:00");

$interval = date_diff($date1, $date2);
echo $interval->format('%R%a días %H horas %I minutos %S segundos');

# Eso te imprime "+379 días 06 horas 36 minutos 34 segundos"


Como dices que lo tienes en diferentes campos cada datos, simplemente recupera la fecha iniciall y los ajuntas para pasarselo al objeto DateTime, y lo mismo para la fecha final.

Dime a ver si eso te ayudó...
Fíjese que en esencia si, pero en mi caso me gustaría (por aprender) hacerlo con números enteros, incluso el date_diff es algo que yo implemente como solución a alguien que hace poco pedía ayuda con un problema similar.

Y su forma de presentarlo es la idónea y la mas fácil, pero quería complicarme un poco mas la existencia haciéndolo todo paso a paso como enteros

Disculpen si les robe su tiempo, creo que me precipite al exponer mi duda

Ojala a alguien en un futuro tambien le sirva este tema.
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #5 (permalink)  
Antiguo 31/03/2017, 12:28
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Sumar Horas, Minutos y Segundos !!!

Cita:
Iniciado por KATHYU Ver Mensaje
Fíjese que en esencia si, pero en mi caso me gustaría (por aprender) hacerlo con números enteros, incluso el date_diff es algo que yo implemente como solución a alguien que hace poco pedía ayuda con un problema similar.

Y su forma de presentarlo es la idónea y la mas fácil, pero quería complicarme un poco mas la existencia haciéndolo todo paso a paso como enteros

Disculpen si les robe su tiempo, creo que me precipite al exponer mi duda

Ojala a alguien en un futuro tambien le sirva este tema.
Pues a mi me parece bien que quieras hacerlo así, si tienes tiempo y no dependes de nadie que exiga rapidez, entonces me parece bien.

De hecho, estas clases tipo DateTime, como crées que se idearon? por personas como tú que lo hacían de la manera complicada y quisieron implementar ese conocimiento en un objeto que con un par de parametros hiciesen todas esas operaciones.

El código que has compartido está bien y funcional, ¿dónde tienes la complicación?
  #6 (permalink)  
Antiguo 31/03/2017, 13:28
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Sumar Horas, Minutos y Segundos !!!

Cita:
Iniciado por Triby2 Ver Mensaje
Pues a mi me parece bien que quieras hacerlo así, si tienes tiempo y no dependes de nadie que exiga rapidez, entonces me parece bien.

De hecho, estas clases tipo DateTime, como crées que se idearon? por personas como tú que lo hacían de la manera complicada y quisieron implementar ese conocimiento en un objeto que con un par de parametros hiciesen todas esas operaciones.

El código que has compartido está bien y funcional, ¿dónde tienes la complicación?
Gracias, si tengo tiempo limitado pero, vamos, solo me tomo menos de 20 mins investigar y adaptar el script, no es cuestión de un día. Es mas, si al volver y no tener nada, veo su respuesta me quedo con ella y dejo la suma de enteros para después.

El código no lo tenia al realizar el post, quise matar dos pájaros de una vez (cosa que siempre hago) coloco la duda acá y sigo buscando y probando por mi cuenta, si la encuentro primero, me respondo yo misma, justo lo que venia hacer, pero usted ya había respondido, y el otro muchacho que me dijo floja

Hoy por hoy, este tema esta resuelto. Y para futuros, cuando alguien quiera hacerlo de la manera difícil o antigua, que tome mi script y si quieren de la manera fácil y moderna el suyo

Gracias Totales !!!!!!!!!

--------------------------------- Editado --------------------------------

Triby, analizando su código veo algo, usted esta sacando la diferencia entre dos fechas X, pero yo no es exactamente lo que quiero si no cuanto tiempo a sido el que el empleado a pedido total en un año, digamoslo así.

Por eso en la tabla tengo un campo para dias, horas y minutos. La query de la que hablo al inicio hasta el momento me genera 28 registros, cada registro tiene diferentes tiempos de ausencia, en Excel sumé todos los días, las horas y los minutos y me dio para cada item
días = 10
Horas = 49
minutos = 404

Cada cosa es separada, entonces yo lo que necesitaba es hacer una suma de esos resultados, cuantos dias cuantas horas y cuantos minutos para asi, cuando se saque el reporte decir, mire Kathyu usted en todo el 2016 falto por permisos 12 dias 7 horas y 44 minutos.

Viendolo de esa forma no se como adaptaria su respuesta a mi necesidad, mas bien el scritp que yo puse es el que me da la respuesta que yo necesito. Pero si sabe como adaptar su date_diff a mi problema, planteelo por favor.

PD: la estructura de la tabla es (a manera abstracta)
id | cod_empleado | dias | horas | minutos | desde | hasta | motivo
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.

Última edición por KATHYU; 31/03/2017 a las 13:39
  #7 (permalink)  
Antiguo 31/03/2017, 22:26
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: Sumar Horas, Minutos y Segundos !!!

Cita:
Iniciado por KATHYU Ver Mensaje
Triby, analizando su código veo algo, usted esta sacando la diferencia entre dos fechas X, pero yo no es exactamente lo que quiero si no cuanto tiempo a sido el que el empleado a pedido total en un año, digamoslo así.

Viendolo de esa forma no se como adaptaria su respuesta a mi necesidad, mas bien el scritp que yo puse es el que me da la respuesta que yo necesito. Pero si sabe como adaptar su date_diff a mi problema, planteelo por favor.

PD: la estructura de la tabla es (a manera abstracta)
id | cod_empleado | dias | horas | minutos | desde | hasta | motivo
Muy sencillo, los dias pedidos durante el año, tienen un inicio y un fín, el inicio es cuando lo solicitó y el fin cuando se terminó ese tiempo. Solo hay que ir sacando las cuentas individualmente con un loop, y después se suman los diferentes resultados.

Se transforman en minutos, se suman todos y luego tú buen código resuelve el resto.

En este caso sería una fabulosa combinación entre mi código y el tuyo. Para que después no te entren duda si la programación antigua es obsoleta... lo antiguo y lo moderno, muchas veces es la mejor opción.

Última edición por Triby2; 31/03/2017 a las 22:31
  #8 (permalink)  
Antiguo 01/04/2017, 03:13
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Sumar Horas, Minutos y Segundos !!!

Yo creo que lo más fácil puede ser crear 2 objetos DateTime con la misma fecha y hora de inicio. A uno de ellos le vas añadiendo los días, horas, minutos y segundos que sea. Luego aplicas diff y obtienes el tiempo transcurrido.


Ejemplo:
Código PHP:
$date1 = new DateTime("2017-01-01");
$date2 = new DateTime("2017-01-01");

    
// Sumas el tiempo que sea
    
$date2->modify('+10 day');
    
$date2->modify('+49 hour');
    
$date2->modify('+404 minute');
    
$date2->modify('+0 second');

    
// Calculas la diferencia
    
$interval $date1->diff($date2);

    
// Formateas y muestras la diferencia
    
echo $interval->format('%R%a días %H horas %I minutos %S segundos'); 
__________________
Unset($vida['malRollo']);
  #9 (permalink)  
Antiguo 03/04/2017, 10:04
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Sumar Horas, Minutos y Segundos !!!

Tomare en cuenta las sugerencias. Gracias
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #10 (permalink)  
Antiguo 03/04/2017, 12:47
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Sumar Horas, Minutos y Segundos !!!

No es necesario usar modify. Puedes usar un intervalo con el tiempo que estas especificando.
Código PHP:
Ver original
  1. $date = new DateTime("2017-01-01");
  2. $interval = new DateInterval("P10DT49H404M0S");
  3. echo $date->format("Y-m-d H:i:s"); //imprime 2017-01-13 07:44:00
Lo que imprime son los 12 días 7 hrs y 44 min.

Ya lo demas es que hagas una función que encapsule el uso de la clase y con eso ya puedes calcular la fecha y la hora limite para que el usuario pueda hacer algo en el sistema
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: horas, minutos, segundos
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 07:50.