Cómo calcular las horas entre dos tiempos con jquery?

Estoy tratando de calcular las horas entre dos tiempos.

A continuación es donde actualmente estoy, pero este código de falla de dos maneras.

1). Necesito .Hours a tiempo de salida en decimal.

(e.g de una y media horas de salida de 1,5 y 15 minutos debe ser de 0,25).

2). Cálculo que actualmente no se tratan valores para el tiempo como time.

(e.g 23:00 a 2:00 de la igualdad de 3 y NO -21 como en la actualidad).


HTML

<input class="Time1" value="10:00" />
<input class="Time2" value="12:00" />
<input class="Hours" value="0" />

JQUERY

 $(function () {
     function calculate() {
         var hours = parseInt($(".Time2").val().split(':')[0], 10) - parseInt($(".Time1").val().split(':')[0], 10);
         $(".Hours").val(hours);
     }
     $(".Time1,.Time2").change(calculate);
     calculate();
 });

http://jsfiddle.net/44NCk/

InformationsquelleAutor DreamTeK | 2014-02-14

4 Kommentare

  1. 9

    Manera fácil es que si usted consigue un valor negativo, agregar las 24 horas y usted debe tener su resultado.

    var hours = parseInt($(".Time2").val().split(':')[0], 10) - parseInt($(".Time1").val().split(':')[0], 10);
    
    //if negative result, add 24 hours
    if(hours < 0) hours = 24 + hours;

    Demo: http://jsfiddle.net/44NCk/1/

    Llegar a los minutos como un decimal implica un poco más como se puede ver en este violín: http://jsfiddle.net/44NCk/2/

    function calculate() {
         var time1 = $(".Time1").val().split(':'), time2 = $(".Time2").val().split(':');
         var hours1 = parseInt(time1[0], 10), 
             hours2 = parseInt(time2[0], 10),
             mins1 = parseInt(time1[1], 10),
             mins2 = parseInt(time2[1], 10);
         var hours = hours2 - hours1, mins = 0;
    
         //get hours
         if(hours < 0) hours = 24 + hours;
    
         //get minutes
         if(mins2 >= mins1) {
             mins = mins2 - mins1;
         }
         else {
             mins = (mins2 + 60) - mins1;
             hours--;
         }
    
         //convert to fraction of 60
         mins = mins / 60; 
    
         hours += mins;
         hours = hours.toFixed(2);
         $(".Hours").val(hours);
     }
    • simple pero eficaz, gracias. ¿Alguna idea de cómo puedo calcular los minutos como decimal?
    • o sea hours +=(hours < 0 ? 24 : 0).
    • Comprobar la actualización de la respuesta.
    • Wow esto es hermoso y muy de agradecer. Muchas gracias.
    • Este es un gran trabajo, con una excepción: Cuando la duración es de 23 a 24 horas resultado es negativo. No puede entender por qué, porque de su declaración si? jsfiddle.net/44NCk/3
    • Hubo un error lógico en las horas si la condición. Versión corregida está aquí: jsfiddle.net/44NCk/4

  2. 0
     $(function () {
         function calculate() {
             var time1 = $(".Time1").val().split(':'), time2 = $(".Time2").val().split(':');
             var hours1 = parseInt(time1[0], 10), 
                 hours2 = parseInt(time2[0], 10),
                 mins1 = parseInt(time1[1], 10),
                 mins2 = parseInt(time2[1], 10),
                 seconds1 = parseInt(time1[2], 10),
                 seconds2 = parseInt(time2[2], 10);
             var hours = hours2 - hours1, mins = 0, seconds = 0;
             if(hours < 0) hours = 24 + hours;
             if(mins2 >= mins1) {
                 mins = mins2 - mins1;
             }
             else {
                 mins = (mins2 + 60) - mins1;
                 hours--;
             }
    
             if (seconds2 >= seconds1) {
                    seconds = seconds2 - seconds1;
             }
             else {
                    seconds = (seconds2 + 60) - seconds1;
                mins--;
             }
    
             seconds = seconds/60;
             mins += seconds;
    
             mins = mins / 60; //take percentage in 60
             hours += mins;
             //hours = hours.toFixed(4);
             $(".Hours").val(hours);
         }
         $(".Time1,.Time2").change(calculate);
         calculate();
     });
  3. 0
    function timeobject(t){
      a = t.replace('AM','').replace('PM','').split(':');
      h = parseInt(a[0]);
      m = parseInt(a[1]);
      ampm = (t.indexOf('AM') !== -1 ) ? 'AM' : 'PM';
      return {hour:h,minute:m,ampm:ampm};
    }
    
    function timediff(s,e){
      s = timeobject(s);
      e = timeobject(e);
      e.hour = (e.ampm === 'PM' &&  s.ampm !== 'PM' && e.hour < 12) ? e.hour + 12 : e.hour;
      hourDiff = Math.abs(e.hour-s.hour);
      minuteDiff = e.minute - s.minute;
    
      if(minuteDiff < 0){
        minuteDiff = Math.abs(60 + minuteDiff);
        hourDiff = hourDiff - 1;
      }
    
      return hourDiff+':'+ Math.abs(minuteDiff);
    }
    
    difference = timediff('09:10 AM','12:25 PM');  //output 3:15
    difference = timediff('09:05AM','10:20PM');  //output 13:15
    • actualizado mi respuesta espero que lo comprendan fácilmente
  4. 0

    Aquí es un Código HTML

     <input type="text" name="start_time" id="start_time" value="12:00">
     <input type="text" name="end_time" id="end_time" value="10:00">
     <input type="text" name="time_duration" id="time_duration">

    Aquí está el código javascript

    function timeCalculating()
      {
        var time1 = $("#start_time").val();
        var time2 = $("#end_time").val();
        var time1 = time1.split(':');
        var time2 = time2.split(':');
        var hours1 = parseInt(time1[0], 10), 
        hours2 = parseInt(time2[0], 10),
        mins1 = parseInt(time1[1], 10),
        mins2 = parseInt(time2[1], 10);
        var hours = hours2 - hours1, mins = 0;
        if(hours < 0) hours = 24 + hours;
        if(mins2 >= mins1) {
            mins = mins2 - mins1;
        }
        else {
          mins = (mins2 + 60) - mins1;
          hours--;
        }
        if(mins < 9)
        {
          mins = '0'+mins;
        }
        if(hours < 9)
        {
          hours = '0'+hours;
        }
        $("#time_duration").val(hours+':'+mins);
      }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea