/** Pad number to 2 digits */ export function pad(n) { return n.toString().padStart(2, "0"); } /** Format seconds as M:SS (e.g. 1:05) */ export function formatTime(seconds) { if (!seconds || isNaN(seconds)) return "0:00"; const m = Math.floor(seconds / 60); const s = Math.floor(seconds % 60).toString().padStart(2, "0"); return `${m}:${s}`; } /** Format seconds as human duration (e.g. 2m 30s) */ export function formatDuration(seconds) { if (!seconds) return ""; const m = Math.floor(seconds / 60); const s = Math.round(seconds % 60); return m > 0 ? `${m}m ${s}s` : `${s}s`; } /** Format ISO timestamp as D Mon HH:MM (e.g. 15 Mar 18:11) */ export function formatTimestamp(iso) { if (!iso) return ""; const d = new Date(iso); return d.toLocaleDateString("en-GB", { day: "numeric", month: "short" }) + " " + d.toLocaleTimeString("en-GB", { hour: "2-digit", minute: "2-digit" }); } /** Format seconds as SRT timestamp (HH:MM:SS,mmm) */ export function formatTimeSRT(seconds) { const h = Math.floor(seconds / 3600); const m = Math.floor((seconds % 3600) / 60); const s = Math.floor(seconds % 60); const ms = Math.floor((seconds % 1) * 1000); return `${pad(h)}:${pad(m)}:${pad(s)},${ms.toString().padStart(3, "0")}`; } /** Format seconds as VTT timestamp (HH:MM:SS.mmm) */ export function formatTimeVTT(seconds) { const h = Math.floor(seconds / 3600); const m = Math.floor((seconds % 3600) / 60); const s = Math.floor(seconds % 60); const ms = Math.floor((seconds % 1) * 1000); return `${pad(h)}:${pad(m)}:${pad(s)}.${ms.toString().padStart(3, "0")}`; }