export function formatTimeUntil(timestamp: number): string { const diff = timestamp - Date.now(); if (diff < 0) return 'overdue'; if (diff < 60_000) return '<1m'; const mins = Math.floor(diff / 60_000); if (mins < 60) return `${mins}m`; const hrs = Math.floor(mins / 60); if (hrs < 24) return `${hrs}h`; return `${Math.floor(hrs / 24)}d`; } export function formatTimeAgo(timestamp: number): string { const diff = Date.now() - timestamp; if (diff < 60_000) return 'just now'; const mins = Math.floor(diff / 60_000); if (mins < 60) return `${mins}m ago`; const hrs = Math.floor(mins / 60); if (hrs < 24) return `${hrs}h ago`; return `${Math.floor(hrs / 24)}d ago`; } /** * Short age formatter for cockpit-style "12s / 4m / 3h / 2d" badges. Always * returns under five characters. Negative deltas (clock skew) read as `0s`. */ export function formatAgeShort(ms: number): string { if (ms < 1000) return '0s'; const s = Math.floor(ms / 1000); if (s < 60) return `${s}s`; const m = Math.floor(s / 60); if (m < 60) return `${m}m`; const h = Math.floor(m / 60); if (h < 24) return `${h}h`; return `${Math.floor(h / 24)}d`; }