假设,我有一个不同时间字符串的数组。
let a: any = ["7:20", "5:50", "6:30"];
我想总结这些HH:mm时间字符串。我正在使用Ionic 4(Angular)构建一个应用程序。我已经使用了momentjs。但是,不幸的是我找不到任何解决方案。
更新: 预期结果: 7:20 + 5:50 + 6:30 = 19:40(HH:33)
答案 0 :(得分:3)
您可以通过传递回调函数来使用reduce
方法。
let arr= ["7:20", "5:50", "6:30"];
toSeconds = (str) => {
str = str.split(':');
return (+str[0]) * 60 + (+str[1]);
}
toHHss = (seconds) => {
let minutes = parseInt(seconds/60);
seconds = seconds - minutes*60;
return minutes + ':' + seconds;
}
let result = arr.reduce((r,elem) => r + toSeconds(elem), 0);
console.log(toHHss(result));
答案 1 :(得分:1)
您可以将时间视为moment durations,可以将其总结为:
const any = ['7:20', '7:52', '5:03', '1:01', '9:02', '6:00'];
const sum = any.reduce((acc, time) => acc.add(moment.duration(time)), moment.duration());
console.log([Math.floor(sum.asHours()), sum.minutes()].join(':'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
答案 2 :(得分:1)
Vanilla Javascript实现:
const secondsToHm = s => ({
hours: ((s - s % 3600) / 3600) % 60,
minutes: ((s - s % 60) / 60) % 60,
})
let a = ["7:20", "5:50", "6:30"];
let total = 0;
for(let i = 0; i < a.length; i++){
const aSlice = a[i].split(':');
const aSeconds = (+aSlice[0]) * 60 * 60 + (+aSlice[1]) * 60;
total += aSeconds
}
console.log(`${secondsToHm(total).hours}:${secondsToHm(total).minutes}`);
答案 3 :(得分:1)
POJS解决方案可能非常简单:
/* Add array of time strings in H:mm format
** @param {Array<string>} timeArray - Array of H:mm
** @returns {string} - sum of times in H:mm format
*/
function addTimes(timeArray) {
let mins = timeArray.reduce((acc, time) => {
let [h, m] = time.split(':');
acc += h*60 + m*1;
return acc;
}, 0);
return (mins/60|0) + ':' + ('0'+(mins%60)).slice(-2);
}
// Example
console.log(addTimes(["7:20", "5:03", "6:42"]));
答案 4 :(得分:0)
您可以使用moment.duration()来获取数组中每个时间字符串的毫秒数,并将其相加。
a.reduce((acc, t) => acc.add(moment.duration(t)), moment.duration())