我在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));
任何想法?
答案 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];
注意大量使用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