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