All files / use-timer/src/utils formatUtils.ts

100% Statements 13/13
100% Branches 6/6
100% Functions 2/2
100% Lines 13/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51                    1190x                   588x   588x   12x     556x 556x       7x 7x       8x 8x       4x       1x 1x      
import type { TimeFormat } from "../types";
import { decompose } from "./timeUtils";
 
/**
 * Pad a number with leading zeros
 * @param num - Number to pad
 * @param length - Desired string length
 * @returns Padded string
 */
function padNumber(num: number, length: number): string {
  return num.toString().padStart(length, "0");
}
 
/**
 * Format milliseconds into a time string
 * @param ms - Time in milliseconds
 * @param format - Desired format
 * @returns Formatted time string
 */
export function formatTime(ms: number, format: TimeFormat): string {
  const { hours, minutes, seconds, milliseconds } = decompose(Math.max(0, ms));
 
  switch (format) {
    case "HH:MM:SS":
      return `${padNumber(hours, 2)}:${padNumber(minutes, 2)}:${padNumber(seconds, 2)}`;
 
    case "MM:SS": {
      const totalMinutes = hours * 60 + minutes;
      return `${padNumber(totalMinutes, 2)}:${padNumber(seconds, 2)}`;
    }
 
    case "SS": {
      const totalSeconds = hours * 3600 + minutes * 60 + seconds;
      return totalSeconds.toString();
    }
 
    case "mm:ss.SSS": {
      const totalMins = hours * 60 + minutes;
      return `${padNumber(totalMins, 2)}:${padNumber(seconds, 2)}.${padNumber(milliseconds, 3)}`;
    }
 
    case "HH:MM:SS.SSS":
      return `${padNumber(hours, 2)}:${padNumber(minutes, 2)}:${padNumber(seconds, 2)}.${padNumber(milliseconds, 3)}`;
 
    default:
      // Default to MM:SS format
      const defaultTotalMinutes = hours * 60 + minutes;
      return `${padNumber(defaultTotalMinutes, 2)}:${padNumber(seconds, 2)}`;
  }
}