Borislav Hadzhiev
Thu Jan 20 2022·2 min read
Photo by Jad Limcaco
To convert seconds to days, hours, minutes and seconds, get the amount of full days and calculate the remainder of hours, minutes and seconds. Then, format the values according to your use case.
function toDaysMinutesSeconds(totalSeconds) { const seconds = Math.floor(totalSeconds % 60); const minutes = Math.floor((totalSeconds % 3600) / 60); const hours = Math.floor((totalSeconds % (3600 * 24)) / 3600); const days = Math.floor(totalSeconds / (3600 * 24)); const secondsStr = makeHumanReadable(seconds, 'second'); const minutesStr = makeHumanReadable(minutes, 'minute'); const hoursStr = makeHumanReadable(hours, 'hour'); const daysStr = makeHumanReadable(days, 'day'); return `${daysStr}${hoursStr}${minutesStr}${secondsStr}`.replace(/,\s*$/, ''); } function makeHumanReadable(num, singular) { return num > 0 ? num + (num === 1 ? ` ${singular}, ` : ` ${singular}s, `) : ''; } console.log(toDaysMinutesSeconds(565)); // 👉️ 9 minutes, 25 seconds console.log(toDaysMinutesSeconds(2073600)); // 👉️ 24 days console.log(toDaysMinutesSeconds(703800)); // 👉️ 8 days, 3 hours, 30 minutes
The toDaysMinutesSeconds
function takes the number of seconds as a parameter
and returns a string that contains the full number of days and the remainder of
hours, minutes and seconds.
The Math.floor function, rounds a number down if the number has a decimal, otherwise it returns the number as is.
console.log(Math.floor(4.99)); // 👉️ 4 console.log(Math.floor(4.01)); // 👉️ 4 console.log(Math.floor(4)); // 👉️ 4
4.213
for the days. For example if the value for the days has a decimal, we want to hide the decimal and show the number of hours.We used the modulo (%) operator to get the remainder of hours, minutes and seconds after we calculated the full days.
The makeHumanReadable
function takes care of formatting the number as a
human-readable string, e.g. 24 days, 5 hours, 30 minutes, 16 seconds
.
In the examples, if the value is 0
, we simply skip it and don't include it in
the final string, however, you could change the makeHumanReadable
function if
you want to show 0
values as well.