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.