使用jquery以HH:MM为单位添加小时数

使用jquery以HH:MM为单位添加小时数,jquery,Jquery,我在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

我在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));
$('.get_sum')。每个(函数(){
if($(this.val())){
sum=($(this.val());
ms=新日期('2011年9月24日'+sum).getTime();
sum+=数字($(this.val());
}
});
函数msToTime(s){
函数addZ(n){

return(n首先将字符串解析为float,然后将它们相加

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];
var parts=sum.toString().split('.');
零件[1]=零件[1]<10?零件[1]+“0”:零件[1];
总和=部分[0]+':'+部分[1];
()


注意parseFloat和toFixed的大量使用,这是为了避免浮点数的恼人错误

这是密码

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())
var totalh=0;
var totalm=0;
$('.get_sum')。每个(函数(){
if($(this.val())){
var h=parseInt($(this.val()).split(':')[0]);
var m=parseInt($(this.val()).split(':')[1]);
总h+=h;
总数m+=m;
}
});
总H+=数学楼层(总m/60);
totalm=totalm%60;
$('.total').val((totalh<10?'0':'')+totalh.toString()+:'+(totalm<10?'0':'')+totalm.toString())

我不知道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;
}
当然,您可以从jQuery中使用它:

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

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

这也是你工作的方式

 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);
var t1='2:20';
变量t2='3:10';
变量t3='2:00';
变量t4='1:00';
变量t5='3:50';
var字符串=[];
推压(t1、t2、t3、t4、t5);
var i;
var hourss=[];
var minutess=[];
对于(i=0;i
在这里,我创建了一个简单的循环,用于添加多次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
var t1=“2:20”;
t1+=“3:10”;
t1+=“2:00”;
t1+=“1:00”;
t1+=“3:50”;
var valNew=t1.split(',');//现在分割时间
var hr1=“00”;
var mnt1=“00”;
var valNew1;
var newval;

对于(var i=0;iIt不太清楚,但t1、t2等都是变量,它们可能是字符串,所以应该更像
var t1='2:20'
为什么不将字符串拆分为HH&MM,然后对每个HH&MM进行计数,然后计算总数呢?我也尝试过这个方法,但问题出现在HH:MM上,比如,如果启动时间超过60分钟用“不是一个好的解决方案”这句话来回答可能不是最明智的战略举措;——如果它不好,为什么要发布它?如果你知道它不好,你也知道如何改进它。为什么你不呢?或者,如果你不知道如何改进它,你怎么知道它不好?:)@Tomalak在发布我的答案后,我看到了你和adeneo的答案,这就是为什么我用“不是一个好的解决方案”这句话编辑了我的答案:)希望你能理解。。。。
    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