2014-02-14 35 views
3

我想計算兩次之間的小時數。如何用jquery計算兩次之間的小時數?

下面是我目前的位置,但是此代碼在兩種方式中失敗。

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/

回答

9

簡單的方法是,如果你得到一個負值,加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小提琴看到:​​

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); 
} 
+0

簡單而有效的感謝。任何想法我可以如何計算十進制分鐘? – Obsidian

+0

或者「小時+ =(小時<0-24:0)」。 – moonwave99

+0

@DreamTeK - 檢查更新的答案。 – techfoobar

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

請解釋一下你的代碼... – GYaN

+0

更新我的答案希望你會很容易理解這一點 – user3263025