Files
Gabriel Radureau a2beadc458
Some checks failed
CI/CD Pipeline / Build Docker Cache (push) Successful in 9s
CI/CD Pipeline / CI Pipeline (push) Failing after 4m48s
CI/CD Pipeline / Trigger Docker Push (push) Has been skipped
feat(server): /api/info aggregator + frontend version footer (#40)
Co-authored-by: Gabriel Radureau <arcodange@gmail.com>
Co-committed-by: Gabriel Radureau <arcodange@gmail.com>
2026-05-05 08:29:26 +02:00

17 lines
670 B
TypeScript

// Convert a duration in seconds to a humanised string like "2h 13m" or "45m 12s".
// Returns "?" for non-finite or negative input so the UI never renders NaN/empty.
export function humaniseUptime(seconds: number | null | undefined): string {
if (seconds == null || !Number.isFinite(seconds) || seconds < 0) return '?'
const s = Math.floor(seconds)
const days = Math.floor(s / 86400)
const hours = Math.floor((s % 86400) / 3600)
const minutes = Math.floor((s % 3600) / 60)
const secs = s % 60
if (days > 0) return `${days}d ${hours}h`
if (hours > 0) return `${hours}h ${minutes}m`
if (minutes > 0) return `${minutes}m ${secs}s`
return `${secs}s`
}