![](/img/trans.png)
[英]Live clock with java script, that shows the actual seconds minutes and hours
[英]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.