export function formatDate(iso) { if (!iso) return '—'; return new Date(iso).toLocaleString(undefined, { day: '2-digit', month: '2-digit', year: '2-digit', hour: '2-digit', minute: '2-digit', }); } export function formatDuration(ms) { if (ms == null) return '—'; if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`; const m = Math.floor(ms / 60000); const s = Math.round((ms % 60000) / 1000); return `${m}m ${s}s`; } // SQLite stores UTC without timezone suffix — normalise before parsing. export function parseUtc(iso) { if (!iso) return null; return new Date(iso.replace(' ', 'T') + 'Z'); } export function formatElapsed(since) { const d = parseUtc(since); if (!d) return '—'; const s = Math.floor((Date.now() - d.getTime()) / 1000); if (s < 60) return `${s}s`; const m = Math.floor(s / 60); if (m < 60) return `${m}m ${s % 60}s`; const h = Math.floor(m / 60); return `${h}h ${m % 60}m`; }