使用javascript的时间总和
如何在javascript中计算时间总和使用javascript的时间总和,javascript,jquery,Javascript,Jquery,如何在javascript中计算时间总和 01:00:00 00:30:00 00:30:00 我有上面的时间,我想要给定时间的总和 sum of above time= 02:00:00 如果我使用javascript方法setHours(),setMinutes(),这些函数将替换旧时间并显示新添加的时间,如: 1. new Date( new Date(0, 0, 0, 00, 00, 00, 0)).setMinutes(30) 2. new Date(new Date( new D
01:00:00
00:30:00
00:30:00
我有上面的时间,我想要给定时间的总和
sum of above time= 02:00:00
如果我使用javascript方法setHours(),setMinutes(),这些函数将替换旧时间并显示新添加的时间,如:
1. new Date( new Date(0, 0, 0, 00, 00, 00, 0)).setMinutes(30)
2. new Date(new Date( new Date(0, 0, 0, 00, 00, 00, 0)).setMinutes(30)).setMinutes(30);
以上两个条件的结果是相同的,但我想在这里00:30+00:30=01:00
。请提前感谢如果您想为此使用
日期
对象,您可以,您只需确保在添加时包含要更改的单位的当前值,如下所示:
var dt=新日期(0,0,0,0,0,0);
dt.setHours(dt.getHours()+1);//1:00开始
dt.setMinutes(dt.getMinutes()+30);//第一次是00:30
dt.setMinutes(dt.getMinutes()+30);//第二天00:30
显示(“小时数:+dt.getHours());
显示(“分钟:+dt.getMinutes());
功能显示(msg){
var p=document.createElement(“p”);
p、 innerHTML=字符串(msg);
文件.正文.附件(p);
}
试试这个:
var time1=“01:00:00”;
var time2=“00:30:00”;
var time3=“00:30:00”;
var小时=0;
var分钟=0;
var秒=0;
var splitTime1=time1.split(“:”);
var splitTime2=time2.split(“:”);
var splitTime3=time3.split(“:”);
小时=parseInt(splitTime1[0])+parseInt(splitTime2[0])+parseInt(splitTime3[0]);
分钟=parseInt(splitTime1[1])+parseInt(splitTime2[1])+parseInt(splitTime3[1]);
小时=小时+分钟/60;
分钟=分钟%60;
second=parseInt(splitTime1[2])+parseInt(splitTime2[2])+parseInt(splitTime3[2]);
分钟=分钟+秒/60;
秒=秒%60;
警报('上述时间之和='+小时+':'+分钟+':'+秒)代码>一些函数可以帮助您在格式化的时间长度和秒数之间来回转换为整数:
function timestrToSec(timestr) {
var parts = timestr.split(":");
return (parts[0] * 3600) +
(parts[1] * 60) +
(+parts[2]);
}
function pad(num) {
if(num < 10) {
return "0" + num;
} else {
return "" + num;
}
}
function formatTime(seconds) {
return [pad(Math.floor(seconds/3600)),
pad(Math.floor(seconds/60)%60),
pad(seconds%60),
].join(":");
}
此解决方案非常完美:
function timestrToSec(timestr) {
var parts = timestr.split(":");
return (parts[0] * 3600) +
(parts[1] * 60) +
(+parts[2]);
}
function pad(num) {
if(num < 10) {
return "0" + num;
} else {
return "" + num;
}
}
function formatTime(seconds) {
return [pad(Math.floor(seconds/3600)%60),
pad(Math.floor(seconds/60)%60),
pad(seconds%60),
].join(":");
}
所以没有%60!!
因为如果我必须计算小时数,它可以大于60(H)对于我来说,这项工作:
function padnum(n){return n<10 ? '0'+n : n}
var time1 = "00:30";
var time2 = "00:60";
var minute=0;
var second=0;
var splitTime1= time1.split(':');
var splitTime2= time2.split(':');
minute = parseInt(parseInt(splitTime1[0]))+parseInt(splitTime2[0]);
second = parseInt(parseInt(splitTime1[1]))+parseInt(splitTime2[1]);
minute = minute + second/60;
minute =parseInt(minute);
second = second%60;
minute = padnum(minute);
second = padnum(second);
alert('sum of above time= '+minute+':'+second);
函数padnum(n){返回n这里是一个包含错误处理的函数
即使它是一个大函数,它也会产生一个有用的单行程序。只需传递一个带值的数组,就可以了
function sumMinutes(values) {
const validate = time => {
if (time > 59 || time < 0) {
throw new Error(
"Hours, minutes and seconds values have to be between 0 and 59."
);
}
return time;
};
const seconds = values
.map(e => validate(Number(e.split(":").reverse()[0])))
.reduce((a, b) => a + b);
let minutes = values
.map(e => Number(e.split(":").reverse()[1]))
.reduce((a, b) => a + b);
let hours = values
.map(e =>
e.split(":").reverse()[2] ? Number(e.split(":").reverse()[2]) : 0
)
.reduce((a, b) => a + b);
minutes *= 60;
hours *= 3600;
let result = new Date((hours + minutes + seconds) * 1000)
.toISOString()
.substr(11, 8);
return result.split(":").reverse()[2] === "00" ? result.slice(3) : result;
}
/* examples */
const seconds = ["00:03", "00:9"];
const mins = ["01:20", "1:23"];
const hours = ["00:03:59", "02:05:01"];
const mix = ["00:04:58", "10:00"];
console.log(sumMinutes(seconds)); //'00:12'
console.log(sumMinutes(mins)); //'02:43'
console.log(sumMinutes(hours)); //'02:09:00'
console.log(sumMinutes(mix)); //'14:58'
函数总和(值){
const validate=time=>{
如果(时间>59 | |时间<0){
抛出新错误(
小时、分钟和秒的值必须介于0和59之间
);
}
返回时间;
};
常数秒=值
.map(e=>validate(数字(e.split(“:”).reverse()[0]))
.减少((a,b)=>a+b);
让分钟=值
.map(e=>Number(e.split(“:”).reverse()[1]))
.减少((a,b)=>a+b);
让小时=数值
.map(e=>
e、 拆分(“:”).reverse()[2]?编号(例如拆分(“:”).reverse()[2]):0
)
.减少((a,b)=>a+b);
分钟*=60;
小时*=3600;
让结果=新日期((小时+分钟+秒)*1000)
.toISOString()
.r(11,8);
返回result.split(“:”).reverse()[2]=“00”?result.slice(3):结果;
}
/*例子*/
常数秒=[“00:03”,“00:9”];
常数分钟=[“01:20”,“1:23”];
常数小时数=[“00:03:59”,“02:05:01”];
常数混合=[“00:04:58”,“10:00”];
console.log(最短分钟(秒));/“00:12”
console.log(sumMinutes(min));/“02:43”
console.log(总和(小时));/“02:09:00”
console.log(sumMinutes(mix));/“14:58”
这里是我如何处理的,如果你只计算小时数,函数将返回总小时数和分钟数,而不是天数
function timeToMins(time) {
var b = time.split(':');
return b[0] * 60 + +b[1];
};
function timeFromMins(mins) {
function z(n) {
if (n < 0) return ('-0' + (n).toString().slice(1));
return (n < 10 ? '0' : '') + n;
};
var h = (mins / 60 | 0);
var m = mins % 60;
return z(h) + ':' + z(m);
};
function addTimes(time0, time1) {
return timeFromMins(timeToMins(time0) + timeToMins(time1));
};
addTimes('02:30', '-00:30');
The output will be: 02:00
// Array [0] 01:00:00
// Array [1] 00:30:00
// Array [2] 00:30:00
let time = '01:00:00';
time = addTimes(time, '00:30:00');
time = addTimes(time, '00:30:00');
The output will be: 02:00
函数timeToMins(时间){
var b=时间分割(“:”);
返回b[0]*60++b[1];
};
功能timeFromMins(分钟){
函数z(n){
if(n<0)返回('-0'+(n).toString().slice(1));
返回(n<10?'0':'')+n;
};
var h=(分钟/60 | 0);
var m=分钟%60;
返回z(h)+':'+z(m);
};
函数addTimes(time0,time1){
返回timeFromMins(timeToMins(time0)+timeToMins(time1));
};
添加时间('02:30','00:30');
输出时间为:02:00
//数组[0]01:00:00
//数组[1]00:30:00
//数组[2]00:30:00
让时间='01:00:00';
时间=添加时间(时间,'00:30:00');
时间=添加时间(时间,'00:30:00');
输出时间为:02:00
请参见,如果持续时间超过一天,则不会产生预期结果
function sumMinutes(values) {
const validate = time => {
if (time > 59 || time < 0) {
throw new Error(
"Hours, minutes and seconds values have to be between 0 and 59."
);
}
return time;
};
const seconds = values
.map(e => validate(Number(e.split(":").reverse()[0])))
.reduce((a, b) => a + b);
let minutes = values
.map(e => Number(e.split(":").reverse()[1]))
.reduce((a, b) => a + b);
let hours = values
.map(e =>
e.split(":").reverse()[2] ? Number(e.split(":").reverse()[2]) : 0
)
.reduce((a, b) => a + b);
minutes *= 60;
hours *= 3600;
let result = new Date((hours + minutes + seconds) * 1000)
.toISOString()
.substr(11, 8);
return result.split(":").reverse()[2] === "00" ? result.slice(3) : result;
}
/* examples */
const seconds = ["00:03", "00:9"];
const mins = ["01:20", "1:23"];
const hours = ["00:03:59", "02:05:01"];
const mix = ["00:04:58", "10:00"];
console.log(sumMinutes(seconds)); //'00:12'
console.log(sumMinutes(mins)); //'02:43'
console.log(sumMinutes(hours)); //'02:09:00'
console.log(sumMinutes(mix)); //'14:58'
function timeToMins(time) {
var b = time.split(':');
return b[0] * 60 + +b[1];
};
function timeFromMins(mins) {
function z(n) {
if (n < 0) return ('-0' + (n).toString().slice(1));
return (n < 10 ? '0' : '') + n;
};
var h = (mins / 60 | 0);
var m = mins % 60;
return z(h) + ':' + z(m);
};
function addTimes(time0, time1) {
return timeFromMins(timeToMins(time0) + timeToMins(time1));
};
addTimes('02:30', '-00:30');
The output will be: 02:00
// Array [0] 01:00:00
// Array [1] 00:30:00
// Array [2] 00:30:00
let time = '01:00:00';
time = addTimes(time, '00:30:00');
time = addTimes(time, '00:30:00');
The output will be: 02:00