使用jquery在HH:MM中增加小时数

时间:2015-01-17 07:28:39

标签: jquery

我在jquery中有多个Time in 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));

任何想法?

5 个答案:

答案 0 :(得分: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,这是为了避免浮点数出现恼人的错误

答案 1 :(得分: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())

答案 2 :(得分: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);

答案 3 :(得分: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));

答案 4 :(得分: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
相关问题