Calculates total time from string of time, such as '1:10:20 30:05 16' Accepted time: HH:MM:SS, MM:SS, SS. One digit for hours, minutes or seconds is excepted.
A Pen by Vlad Bezden on CodePen.
| <h1 id="result"></h1> |
| 'use strict' | |
| const data = '1:10 12:15 6:43 1:08 4:27 13:09 23 11:50 5:48 8:1 23 2:38 9:44 9:4 8:7 10:56 5:32 11:10 5:15 3:05 6:27 4:39 2:13 16 3:15 4:29 25' | |
| /** | |
| * Converts string representation of hours, minutes and seconds to seconds | |
| * | |
| * @param {string | number} seconds | |
| * @param {string | number} minutes - default 0 | |
| * @param {string | number} hours - default 0 | |
| * @return {number} - total number of seconds | |
| */ | |
| function toSeconds(seconds, minutes = 0, hours = 0) { | |
| return parseInt(seconds) + | |
| parseInt(minutes) * 60 + | |
| parseInt(hours) * 3600 | |
| } | |
| /** | |
| * Pads value with specified number of characters | |
| * | |
| * @param {string} symbol - char that pad value needs to be padded with | |
| * @param {number} length - total length of the string including padding | |
| * @param {number} value - value to be padded | |
| * @return {string} - padded result | |
| */ | |
| function pad(symbol, length) { | |
| return function(value) { | |
| return ((new Array(length)).join(symbol) + value).slice(-length) | |
| } | |
| } | |
| const twoZerosPad = pad('0', 2) | |
| const timePad = (time) => twoZerosPad(time) | |
| /** | |
| * Converts total number of seconds to hours minutes and seconds | |
| * | |
| * @param {number} seconds - total number of seconds | |
| * @return {{hours: number, minutes: number, seconds: number}} | |
| */ | |
| function secondsToTime(seconds) { | |
| return { | |
| hours: Math.floor(seconds / 3600), | |
| minutes: Math.floor((seconds % 3600) / 60), | |
| seconds: seconds % 60 | |
| } | |
| } | |
| /** | |
| * Prints out result | |
| * @param {{hours: number, minutes: number, seconds: number}} - time | |
| */ | |
| function print(result) { | |
| const message = `Total time: ${timePad(result.hours)}:${timePad(result.minutes)}:${timePad(result.seconds)}` | |
| console.log(message) | |
| document.querySelector('#result').innerHTML = message | |
| } | |
| const resultInSeconds = data | |
| .split(' ') | |
| .filter(x => x.trim()) | |
| .map(t => toSeconds(...t.split(':').reverse())) | |
| .reduce((a, c) => (a += c), 0) | |
| print(secondsToTime(resultInSeconds)) |
Calculates total time from string of time, such as '1:10:20 30:05 16' Accepted time: HH:MM:SS, MM:SS, SS. One digit for hours, minutes or seconds is excepted.
A Pen by Vlad Bezden on CodePen.