Co-authored-by: Gabriel Radureau <arcodange@gmail.com> Co-committed-by: Gabriel Radureau <arcodange@gmail.com>
17 lines
670 B
TypeScript
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`
|
|
}
|