26 lines
992 B
TypeScript
26 lines
992 B
TypeScript
export function formatDuration(nano: number): string {
|
|
if (nano >= 3600000000000) { // 1 hour in nanoseconds
|
|
return `${(nano / 3600000000000).toFixed(1)}h`;
|
|
} else if (nano >= 60000000000) { // 1 minute
|
|
return `${(nano / 60000000000).toFixed(1)}m`;
|
|
} else if (nano >= 1000000000) { // 1 second
|
|
return `${(nano / 1000000000).toFixed(1)}s`;
|
|
} else if (nano >= 1000000) { // 1 millisecond
|
|
return `${(nano / 1000000).toFixed(1)}ms`;
|
|
} else if (nano >= 1000) { // 1 microsecond
|
|
return `${(nano / 1000).toFixed(1)}μs`;
|
|
} else {
|
|
return `${nano.toFixed(1)}ns`;
|
|
}
|
|
}
|
|
|
|
/** "just now", "2m ago", "3h ago", "5d ago" */
|
|
export function formatRelativeTime(msEpoch: number): string {
|
|
const seconds = Math.max(0, (Date.now() - msEpoch) / 1000);
|
|
if (seconds < 60) return "just now";
|
|
if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;
|
|
if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;
|
|
return `${Math.floor(seconds / 86400)}d ago`;
|
|
}
|
|
|