如何在JavaScript中获取字符串的总和?(时间格式:00:00:00)
我有这样的时间阵列:如何在JavaScript中获取字符串的总和?(时间格式:00:00:00),javascript,time,Javascript,Time,我有这样的时间阵列: // hours, minutes, seconds let arr = ["00:00:30", "00:20:00", "01:00:10", "05:10:15"] 我如何得到这些元素的总和 output: "06:30:55" 让arr=[“00:00:30”、“00:20:00”、“01:00:10”、“05:10:15”] 设h=0,m=0,s=0; arr
// hours, minutes, seconds
let arr = ["00:00:30", "00:20:00", "01:00:10", "05:10:15"]
我如何得到这些元素的总和
output: "06:30:55"
让arr=[“00:00:30”、“00:20:00”、“01:00:10”、“05:10:15”]
设h=0,m=0,s=0;
arr.map((值,i)=>{
h=h++值。拆分(“:”[0];
m=m++值。拆分(“:”[1];
s=s++值。拆分(“:”[2];
})
console.log(h+“:“+m+”:“+s)
请使用此代码重试
让arr=[“00:00:30”、“00:20:00”、“01:00:10”、“05:10:15”]
让sum=“”;
for(设i=0;i 控制台日志(总和)代码>您可以使用一组系数来计算gettign all seconds,并使用较小的单位构建一个新字符串
let数组=[“00:00:30”、“00:20:00”、“01:00:10”、“05:10:15”],
系数=[3600,60,1],
秒=数组.reduce((秒,时间)=>time.split(“:”).reduce((s,t,i)=>s+t*因子[i],秒),0),
结果=因子。映射(因子=>{
常数值=数学下限(秒/系数);
秒-=值*系数;
返回值.toString().padStart(2,0);
})。加入(“:”);
控制台日志(结果)代码>如注释中所述,最简单的方法是将持续时间数组转换为秒,将它们相加得到总秒数,然后将总秒数解析为所需的HH:MM:SS格式
有几个步骤:
创建一个从持续时间解析秒数的函数
在应用我们在步骤1中创建的方法时,用于从持续时间数组中获取总秒数
从步骤2将总秒数解析为所需格式。您可以使用来实现每个时间单位的两位数输出
以下是一个概念验证示例:
const arr=[“00:00:30”、“00:20:00”、“01:00:10”、“05:10:15”]
/**
*@方法
*用前导零将给定数字填充到2位
*/
函数编号(num){
返回num.toString().padStart(2,'0');
}
/**
*@方法
*以HH:MM:SS格式获取持续时间的秒数
*/
函数getSecondsFromDuration(持续时间){
const[hours,minutes,seconds]=duration.split(“:”).map(n=>+n);
返回时间*60*60+分*60+秒;
}
/**
*@方法
*将给定的持续时间(以秒为单位)格式化为HH:MM:SS字符串
*/
函数getDurationFromSeconds(秒){
常数小时=数学楼层(秒/3600);
秒-=小时*3600;
常数分钟=数学楼层(秒/60);
秒-=分钟*60;
返回`${padNumber(小时)}:${padNumber(分钟)}:${padNumber(秒)}`;
}
const totalSeconds=arr.reduce((acc,cur)=>{
返回acc+getSecondsFromDuration(cur);
}, 0);
log(getDurationFromSeconds(totalSeconds))
您可以将映射
和减少
组合在一起,对时间求和,然后将它们转换为日期
:
const res=[“00:00:30”、“00:20:00”、“01:00:10”、“05:10:15”]。地图(元素=>{
const tmp=element.split(“:”)
返回(+tmp[0])*60*60+(+tmp[1])*60+(+tmp[2])
}).减少((acc,电流)=>acc+电流)
施工日期=新日期(res*1000)
const minutes=date.getMinutes();
const hours=date.getHours()-1;//请注意-1以获取时间而不是当前小时
const seconds=date.getSeconds();
log(“持续时间:,`${hours}:${minutes}:${seconds}`”)
您试过做什么吗?你可以循环遍历它,拆分它(转换为秒),求和,最后你可以从秒开始以任何方式格式化它。字符串本身没有任何意义。将每个字符串转换为一个时间戳,将时间戳添加到一起,并将结果格式化为输出。请注意,如果分钟或秒的总和超过60,则该操作将无效。