javascript 如何使用jquery计算两次之间的小时数?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21777666/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-27 21:40:31  来源:igfitidea点击:

How to calculate the hours between two times with jquery?

javascriptjqueryhtmlinputtime

提问by DreamTeK

I am trying to calculate the hours between two times.

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

Below is where I am currently but this code fails in two ways.

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

1).I need .Hoursto output time in decimal.

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

(e.g one and half hours should output 1.5 and 15mins should be 0.25).

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

2).Calculation currently does not treat values for time as time.

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

(e.g 23:00 to 2:00 should equal 3and NOT-21as currently).

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



HTML

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/

http://jsfiddle.net/44NCk/

回答by techfoobar

Easy way is if you get a negative value, add 24 hours to it and you should have your result.

简单的方法是如果你得到一个负值,加上 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;

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

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

Getting the minutes as a decimal involves a bit more as you can see in thsi fiddle: http://jsfiddle.net/44NCk/2/

正如您在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);
 }

回答by user3263025

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

回答by Sumit Kumar Gupta

Here is an HTML Code

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

Here is javascript code

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

回答by user6736994

 $(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();
 });