如何在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,则该操作将无效。