【问题标题】:How to calculate the hours between two times with jquery?如何用jquery计算两次之间的小时数?
【发布时间】:2014-03-13 17:08:24
【问题描述】:

我正在尝试计算两次之间的小时数。

以下是我目前所在的位置,但此代码在两种情况下失败。

1). 我需要.Hours 以十进制输出时间。

(例如一个半小时应该输出 1.5 和 15 分钟应该是 0.25)。

2)。计算当前不将时间值视为time

(例如 23:00 到 2:00 应该等于 3 -21 当前)。


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/

【问题讨论】:

    标签: javascript jquery html input time


    【解决方案1】:

    这是一个 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">
    

    这里是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);
      }
    

    【讨论】:

    • 您好,您能否用十进制输出持续时间来扩展脚本?例如 08:24 为 8,4 小时。另一个不错的选择是休息时间。让我说休息时间是 01:06(1 小时和 6 分钟)。谢谢。
    • 在这里找到你的答案
    【解决方案2】:
    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
    

    【讨论】:

    • 更新了我的答案希望你能轻松理解
    【解决方案3】:
     $(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();
     });
    

    【讨论】:

      【解决方案4】:

      简单的方法是,如果你得到一个负值,再加上 24 小时,你就会得到你的结果。

      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;
      

      演示:http://jsfiddle.net/44NCk/1/

      如您在 thsi fiddle 中所见,以小数形式获取分钟涉及更多内容: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);
       }
      

      【讨论】:

      • 简单但有效的感谢。知道如何将分钟计算为十进制吗?
      • hours +=(hours &lt; 0 ? 24 : 0)
      • @techfoobar 哇,这太漂亮了,非常感谢。非常感谢。
      • @techfoobar 这很好用,但有一个例外:当持续时间为 23-24 小时时,结果仍然为负。由于您的 if 语句,无法理解为什么? jsfiddle.net/44NCk/3
      • 如果条件的小时数出现逻辑错误。更正版本在这里:jsfiddle.net/44NCk/4
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      相关资源
      最近更新 更多