Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/02/2014, 22:05
corei7
 
Fecha de Ingreso: febrero-2013
Mensajes: 119
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: Calcular tiempo entre dos horas (HH:MM:SS)

Cita:
Iniciado por Alexis88 Ver Mensaje
Claro que se puede:

Código Javascript:
Ver original
  1. var hora1 = ("04:29:01").split(":"),
  2.     hora2 = ("03:28:56").split(":"),
  3.     t1 = new Date(),
  4.     t2 = new Date();
  5.  
  6. t1.setHours(hora1[0], hora1[1], hora1[2]);
  7. t2.setHours(hora2[0], hora2[1], hora2[2]);
  8.  
  9. //Aquí hago la resta
  10. t1.setHours(t1.getHours() - t2.getHours(), t1.getMinutes() - t2.getMinutes(), t1.getSeconds() - t2.getSeconds());
  11.  
  12. //Imprimo el resultado
  13. document.body.innerHTML = "La diferencia es de: " + (t1.getHours() ? t1.getHours() + (t1.getHours() > 1 ? " horas" : " hora") : "") + (t1.getMinutes() ? ", " + t1.getMinutes() + (t1.getMinutes() > 1 ? " minutos" : " minuto") : "") + (t1.getSeconds() ? (t1.getHours() || t1.getMinutes() ? " y " : "") + t1.getSeconds() + (t1.getSeconds() > 1 ? " segundos" : " segundo") : "");

El resultado es:

Código HTML:
Ver original
  1. La diferencia es de: 1 hora y 5 segundos

Con tus datos, el resultado sería: "La diferencia es de: 5 segundos".

Tenemos inicialmente 2 horas con el formato HH:MM:SS, a cada una la convierto en un array distinto, separando sus elementos desde el ":" que separa las horas de los minutos y segundos, además, creo dos objetos Date para manipular las horas.

A cada objeto Date, le asigno las horas, minutos y segundos que obtuve de cada una de las horas en cuestión, luego, asigno al primer objeto sus nuevos componentes de horas, minutos y segundos, que no son otros que la resta de las horas, minutos y segundos del primer objeto con el segundo. Finalmente, imprimo la diferencia.

Así es como se ve en ejecución: http://jsfiddle.net/pwYG8/

La línea de código de la impresión del resultado es un poco larga porque acomodo las palabras que se mostrarán según el valor de cada parte del objeto Date, para que cuando haya una hora, un minuto o un segundo en el resultado, se muestre de esa forma y no "1 segundos", por ejemplo.

Saludos
Muchas gracias Alexis, muy buena explicación, gracias por tu tiempo.

Sólo una pregunta, cuando usas la función new Date(), estás creando una variable de fecha, con formato completo. Si las dos Dates tienen un día distinto, la diferencia seguirá siendo sólo de la hora, o también de la fecha? Ej: 1 día y 30 segundos de diferencia...

Editado: No sé si me he explicado bien antes, me refiero a esto:

FECHA1: 13 Febrero, 23:59:59
FECHA2: 14 Febrero, 00:00:02

La diferencia sería de 3 segundos? O sería de 1 día y 3 segundos?

Gracias, un saludo!

Última edición por corei7; 12/02/2014 a las 22:21