Exercise 18: Convert Seconds to Human Readable Time
Problem Statement
Create a function `formatDuration(seconds)` that converts seconds to "Xh Ym Zs" format.
Example: formatDuration(3665) → "1h 1m 5s"
Sample Output:
formatDuration(3665) => "1h 1m 5s" formatDuration(125) => "2m 5s" formatDuration(45) => "45s"
Solution
const formatDuration = (seconds) => {
const s = Math.floor(Number(seconds) || 0);
const h = Math.floor(s / 3600);
const m = Math.floor((s % 3600) / 60);
const sec = s % 60;
const parts = [];
if (h > 0) parts.push(`${h}h`);
if (m > 0) parts.push(`${m}m`);
if (sec > 0 || parts.length === 0) parts.push(`${sec}s`);
return parts.join(" ");
};Explanation
Overall Goal:
- Seconds ko hours, minutes, seconds me convert.
- Human-readable format me return.
Line 1: Function header
const formatDuration = (seconds) => {
Line 2: Normalize
const s = Math.floor(Number(seconds) || 0);
Line 3: Calculate hours
const h = Math.floor(s / 3600);- 3600 seconds = 1 hour.
Line 4: Calculate minutes
const m = Math.floor((s % 3600) / 60);- Remaining seconds se minutes.
Line 5: Calculate seconds
const sec = s % 60;
Line 6-9: Build parts
- Non-zero parts ko array me add.
Line 10: Join
return parts.join(" ");
Real world:
- Video players: duration display.
- Timers: countdown display.
- Analytics: session duration.