diff --git a/snippets/formatSeconds.md b/snippets/formatSeconds.md new file mode 100644 index 000000000..d66b5a4b1 --- /dev/null +++ b/snippets/formatSeconds.md @@ -0,0 +1,33 @@ +--- +title: formatSeconds +tags: date,math,string,intermediate +--- + +Returns the ISO format of the given number of seconds. + +- Divide `s` with the appropriate values to obtain the appropriate values for `hour`, `minute` and `second`. +- Store the `sign` in a variable to prepend it to the result. +- Use `Array.prototype.map()` in combination with `Array.prototype.floor()` and `String.prototype.padStart()` to stringify and format each segment. +- Use `String.prototype.join(':')` to combine the values into a string. + +```js +const formatSeconds = s => { + const [hour, minute, second, sign] = + s > 0 + ? [s / 3600, (s / 60) % 60, s % 60, ''] + : [-s / 3600, (-s / 60) % 60, -s % 60, '-']; + + return ( + sign + + [hour, minute, second] + .map(v => `${Math.floor(v)}`.padStart(2, '0')) + .join(':') + ); +}; +``` + +```js +formatSeconds(200); // '00:03:20' +formatSeconds(-200); // '-00:03:20' +formatSeconds(99999); // '27:46:39' +```