Este artículo demuestra cómo restar horas en JavaScript, utilizando un simple formulario.

La función matemática para restar dos horas es simple, si se asume que a una determinada hora (expresada en horas y minutos en el formato hh:mm) se le desea restar una hora anterior (dentro del mismo día). Primero se restan las horas, luego los minutos. Si la resta de los minutos es negativa, significa que "nos hemos pasado", por lo tanto se debe restar uno a la hora ("tomar prestado", como cuando no enseñaron a restar en la primaria) y sumarle 60 a los minutos, para que quede un número positivo.

Hora inicio (hh:mm):

Hora fin (hh:mm):

 

Tiempo transcurrido:

(Nota: no utilizar espacios en blanco al expresar las horas.)

Este formulario es implementado mediante el siguiente código HTML+JavaScript:

<div style="width: 350px;">
<p>Hora inicio (hh:mm): <input type="text" id="inicio" value="" /></p>
<p>Hora fin (hh:mm):<input type="text" id="fin" value="" /></p>
<p><input type="button" onclick="restarHoras();" value="Restar horas"></p>
<p>&nbsp;</p>
<p>Tiempo transcurrido: <input type="text" id="resta" value="" /></p>
</div>

<script>

function restarHoras() {

  inicio = document.getElementById("inicio").value;
  fin = document.getElementById("fin").value;
  
  inicioMinutos = parseInt(inicio.substr(3,2));
  inicioHoras = parseInt(inicio.substr(0,2));
  
  finMinutos = parseInt(fin.substr(3,2));
  finHoras = parseInt(fin.substr(0,2));

  transcurridoMinutos = finMinutos - inicioMinutos;
  transcurridoHoras = finHoras - inicioHoras;
  
  if (transcurridoMinutos < 0) {
    transcurridoHoras--;
    transcurridoMinutos = 60 + transcurridoMinutos;
  }
  
  horas = transcurridoHoras.toString();
  minutos = transcurridoMinutos.toString();
  
  if (horas.length < 2) {
    horas = "0"+horas;
  }
  
  if (horas.length < 2) {
    horas = "0"+horas;
  }
  
  document.getElementById("resta").value = horas+":"+minutos;

}

</script>

 

El funcionamiento es simple: primero obtiene las horas en formato de texto (string); luego las separa en horas/minutos y convierte los valores de texto a entero; realiza la resta y convierte los valores nuevamente a texto; finalmente agrega un cero a izquierda para cada valor que posea sólo un dígito. El resultado es insertado en el cuadro de texto debajo del botón.

Si se necesita restar horas con segundos es la misma operación. Primero restar horas, minutos y segundos. Luego, si la resta de los segundos es negativa, restar uno a los minutos y sumar sesenta a los segundos. Repetir el mismo procedimiento para los minutos.


Tal vez pueda interesarte


Compartí este artículo