繁体   English   中英

在 Java 脚本中求和时:分:秒

[英]Sum Hours:Minutes:Seconds in Java script

我如何在 JavaScript 中求和时:分:秒。 我的意思是 04:32:05 03:14:03 得到 07:46:08

我试过了

    var time1 = "01:00:01";
    var time2 = "01:00:10";
    var time3 = "01:54:00";
    var time4 = "01:30:00";
    var time5 = "01:00:00";
    var time6 = "01:00:00";
    var time7 = "01:00:00";
    
    var hour=0;
    var minute=0;
    var second=0;
    
    var splitTime1= time1.split(':');
    var splitTime2= time2.split(':');
    var splitTime3= time3.split(':');
    var splitTime4= time4.split(':');
    var splitTime5= time5.split(':');
    var splitTime6= time6.split(':');
    var splitTime7= time7.split(':');
    
    hour = parseInt(splitTime1[0]) + parseInt(splitTime2[0])  + parseInt(splitTime3[0])  + parseInt(splitTime4[0])  + parseInt(splitTime5[0])  + parseInt(splitTime6[0]) + parseInt(splitTime7[0]) 
    minute = parseInt(splitTime1[1]) + parseInt(splitTime2[1]) + parseInt(splitTime3[1]) + parseInt(splitTime4[1]) + parseInt(splitTime5[1]) + parseInt(splitTime6[1]) + parseInt(splitTime7[1])
    hour = hour + minute/60;
    minute = minute%60;
    second = parseInt(splitTime1[2]) + parseInt(splitTime2[2]) + parseInt(splitTime3[2]) 
    + parseInt(splitTime4[2]) + parseInt(splitTime5[2]) + parseInt(splitTime6[2]) + 
    parseInt(splitTime7[2]) 
    minute = minute + second/60;
    second = second%60;
    
   console.log(hour+ ":" + minute + ":"+ second)

我得到的 output 是 8.4:24.183333333333334:11 而不是 08:24:11 有什么建议吗?

你让它变得非常复杂,你可以通过转换为 Date 对象来减少它,然后添加每个日期以获得所有日期的总和了解 JavaScript 中的日期和时间

您应该研究的第一件事是使用Array ,因为您有许多相同类型的对象。

理想情况下,您应该有类似的东西,

const times = ["04:32:05", "03:14:03", ...]

一旦你有了这个,这个问题就简化reduce function 的经典用例。 reduce function 对数组进行操作,每一步累加操作的值,最后产生一个值。

这是您的问题的示例解决方案

 const times = ["04:32:05", "03:14:03"] //const times = ["01:00:01", "01:00:10","01:54:00","01:30:00"] let finalSum = times.reduce((sum, curr) => { //Obtain the current timestamp as an array of numbers //[HRS, MINS, SECS] let currTimeStamp = curr.split(":").map(token => parseInt(token)); //Add the current seconds to the total seconds so far sum[2] += currTimeStamp[2]; //See how many minutes you got leftover as a result of that addition const leftOverMins = Math.floor(sum[2] / 60); //Mod by 60, to keep the seconds under 60 sum[2] %= 60; //Add the leftover minutes to the sum operation for minutes sum[1] += (currTimeStamp[1] + leftOverMins); //Similar procedure as above const leftOverHours = Math.floor(sum[1] / 60); sum[1] %= 60; sum[0] += (currTimeStamp[0] + leftOverHours); sum[0] %= 24; return sum }, [0, 0, 0]) console.log(finalSum.join(":"))

您好,希望这个答案对您有所帮助,我建议更换您的底部(您计算的地方)

 var time1 = "01:00:01"; var time2 = "01:00:10"; var time3 = "01:54:00"; var time4 = "01:30:00"; var time5 = "01:00:00"; var time6 = "01:00:00"; var time7 = "01:00:00"; var hour=0; var minute=0; var second=0; var splitTime1= time1.split(':'); var splitTime2= time2.split(':'); var splitTime3= time3.split(':'); var splitTime4= time4.split(':'); var splitTime5= time5.split(':'); var splitTime6= time6.split(':'); var splitTime7= time7.split(':'); var allTimes = [splitTime1, splitTime2, splitTime3, splitTime4, splitTime5, splitTime6, splitTime7] allTimes.forEach(element => { hour += parseInt(element[0]) minute += parseInt(element[1]) second += parseInt(element[2]) }) minute += Math.round(second / 60); second = second % 60; hour += Math.round(minute / 60); minute = minute % 60 console.log(hour+ ":" + minute + ":"+ second)

您的代码的问题是您包含小数点

hour = hour + minute/60;

你需要把它铺平。

hour = hour + Math.floor(minute/60);

现在如何在没有大量重复代码的情况下做到这一点。

 function toSeconds(s) { const parts = s.split(':'); return +parts[0] * 3600 + +parts[1] * 60 + +parts[2]; } function secondsToHHMMSS(secs) { return Math.floor(secs / 3600).toString().padStart(2, '0') + ':' + (Math.floor(secs / 60) % 60).toString().padStart(2, '0') + ':' + (secs % 60).toString().padStart(2, '0'); } const timestamps = ["01:00:01", "01:00:10", "01:54:00", "01:30:00", "01:00:00", "01:00:00", "01:00:00"]; const totalSeconds = timestamps.reduce(function(total, ts) { return total + toSeconds(ts); }, 0); const result = secondsToHHMMSS(totalSeconds); console.log(result);

如果你想求和,那么你应该试试这个

var addTime = function (time1, time2) {
//   convert to ms
  var dateObject1 = new Date(time1).valueOf();
  var dateObject2 = new Date(time2).valueOf();
  
  return dateObject1 + dateObject2;
}


var time1 = new Date().setHours(4, 32, 5, 0);
var time2 = new Date().setHours(3, 14, 3, 0);

var sum = new Date(addTime(time1, time2));

var getFormatedTime = function (time) {
  return time.getHours()+':'+time.getMinutes()+':'+time.getSeconds()
}


console.log(getFormatedTime(sum))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM