2015-01-17 26 views
4

我在jQuery中使用HH:MM格式的多個時間。像使用jquery在HH:MM中添加小時

t1= '2:20'; 
t2= '3:10'; 
t3= '2:00'; 
t4= '1:00'; 
t5= '3:50'; 
............ 

我們怎樣才能在HH:MM格式中添加所有無限時間。例如,上述時間的總和將是12:20。 我已經嘗試過下面的代碼來做這個計算。

$('.get_sum').each(function() { 
      if (($(this).val())) { 
       sum = ($(this).val()); 
       ms = new Date('Sep 24 2011 '+sum).getTime(); 
       sum += Number($(this).val()); 
      } 
     }); 

function msToTime(s) { 

    function addZ(n) { 
    return (n<10? '0':'') + n; 
    } 

    var ms = s % 1000; 
    s = (s - ms)/1000; 
    var secs = s % 60; 
    s = (s - secs)/60; 
    var mins = s % 60; 
    var hrs = (s - mins)/60; 

    return addZ(hrs) + ':' + addZ(mins) + ':' + addZ(secs) + '.' + ms; 
} 

alert(msToTime(sum)); 

有什麼想法嗎?

+1

這不是真的清楚,但T1,T2等都是變量,它們可能是字符串,所以它應該更像'變種T1 =「2:20'' – adeneo

+0

你爲什麼不分割字符串HH和MM,然後計算每個HH和MM,然後計算總數..? – Sachin

+0

我也試過這個東西,但問題來了......恩:如果它有超過60分鐘 – Ankit

回答

1

首先解析字符串作爲花車,然後把它們加起來

var sum = [t1,t2,t3,t4,t5].map(function(x) { 
    return parseFloat(x.replace(':','.')); 
}).reduce(function(a,b) { return a + b; }); 

留下您11.8,所以我們需要檢查是否是最後的數字是超過.6如果是,加1到總,減去小數.6並添加其餘

var left = (sum - parseInt(sum, 10)).toFixed(2); 

if (left >= 0.6) sum = parseInt((sum += 1), 10) + parseFloat((left - 0.6).toFixed(2)); 

現在你有數量12.2,如果你想12:20你解析回添加一個字符串填充它

var parts = sum.toString().split('.'); 

parts[1] = parts[1] < 10 ? parts[1] + '0' : parts[1]; 

sum = parts[0] + ':' + parts[1]; 

FIDDLEanother one

注意大量使用parseFloat和toFixed的,這是爲了避免與浮點數惱人的錯誤

+0

非常感謝你這個解決方案....! – Ankit

1

下面是一個簡單的方法來計算時間和分鐘分開..

Fiddle here 這裏是代碼

var totalh =0; 
var totalm =0; 
$('.get_sum').each(function() { 
      if (($(this).val())) { 
       var h = parseInt(($(this).val()).split(':')[0]); 
       var m = parseInt(($(this).val()).split(':')[1]); 
       totalh += h; 
       totalm += m; 
      } 
     }); 
totalh += Math.floor(totalm/60); 
totalm = totalm % 60; 

$('.total').val((totalh < 10 ? '0' : '') + totalh.toString() + ':' + (totalm < 10 ? '0' : '') + totalm.toString()) 
+0

真棒的想法...! – Ankit

0

我不知道jQuery,但你可以用JavaScript來做。

function totalTimes(times) { 
    var totalM = times.map(function (hhmm) { 
      var parts = hhmm.split(":"); 
      return (+parts[0] * 60) + (+parts[1]); 
     }).reduce(function (m1, m2) { 
      return m1 + m2; 
     }, 0), 
     h = Math.floor(totalM/60), 
     m = totalM % 60; 

    return h + ':' + (m < 10 ? '0' : '') + m; 
} 

用法:

console.log(totalTimes(["10:30", "9:45", "0:15"])); // "20:30" 
console.log(totalTimes(["23:00", "0:90"]));   // "24:30" 

當然你也可以從jQuery的使用它:

var times = $("div.time").map(function() { 
     return $.trim($(this).text()); 
    }).toArray(); 

$("#total").text(totalTimes(times)); 
1

這也是這樣做你的工作。

var t1= '2:20'; 
var t2= '3:10'; 
var t3= '2:00'; 
var t4= '1:00'; 
var t5= '3:50'; 
var strings=[]; 
strings.push(t1,t2,t3,t4,t5); 

var i; 
var hourss=[]; 
var minutess=[]; 

for (i = 0; i < strings.length; i++) { 
    var result= strings[i].split(':'); 
    hourss.push(result[0]); 
    minutess.push(result[1]); 
} 

var minutes=0 
for (var i in minutess) { 
     minutes = parseInt(minutess[i]) + minutes; 
} 

var realmin = minutes % 60 
var hours = Math.floor(minutes/60)  
for (var i in hourss) { 
     hours = parseInt(hourss[i]) + hours; 
} 

total=hours+':'+realmin; 
console.log(total); 
+0

用詞「*不是一個好的解決方案」開始您的答案*可能不是最具戰略意義的舉措。 ;) - 如果它不好,爲什麼發佈它?如果你知道*這不好,你也知道如何改進它。你爲什麼不呢?或者,如果你*不知道如何改進它,你怎麼知道它不好呢? :) – Tomalak

+0

@Tomalak發佈我的答案後,我看到你的和adeneo的答案,這就是爲什麼我用這句話編輯我的答案「不是一個好的解決方案」。 :) :)希望你明白.... –

0

在這裏,我創建了一個簡單的循環添加超過一次hh:mm。

var t1 = "2:20,"; 
     t1 += "3:10,"; 
     t1 += "2:00,"; 
     t1 += "1:00,"; 
     t1 += "3:50"; 
    var valNew=t1.split(',');//now split the time 
    var hr1 = "00"; 
    var mnt1 = "00"; 
    var valNew1; 
    var newval; 
    for(var i=0;i<valNew.length;i++){ 
      valNew1=valNew[i].split(':'); 
      newval1 = parseFloat(valNew1[1])+parseFloat(mnt1); 
      mnt1 = newval1; 
      newval = parseFloat(valNew1[0])+parseFloat(hr1); 
      hr1 = newval; 
     } 
//now finally we get all addition of time in second 
     hr = Math.floor(newval1/60); 
     mnt = newval1%60; 
     var hour = parseFloat(newval)+parseFloat(hr); 
     alert(hour+':'+mnt); 
//so we can calculate hh:mm 
+0

請解釋你的答案..所以人們可以理解.. – Sachin