Something went wrong. Try again.
The agent that grows with you
Something went wrong. Try again.
1.0 kB · 26 lines
TypeScript
123456789101112131415161718192021222324252627import { type ClassValue, clsx } from "clsx";import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs));}
/** Relative time from a Unix epoch timestamp (seconds). */export function timeAgo(ts: number): string { const delta = Date.now() / 1000 - ts; if (delta < 60) return "just now"; if (delta < 3600) return `${Math.floor(delta / 60)}m ago`; if (delta < 86400) return `${Math.floor(delta / 3600)}h ago`; if (delta < 172800) return "yesterday"; return `${Math.floor(delta / 86400)}d ago`;}
/** Relative time from an ISO-8601 timestamp string. */export function isoTimeAgo(iso: string): string { const delta = (Date.now() - new Date(iso).getTime()) / 1000; if (delta < 0 || Number.isNaN(delta)) return "unknown"; if (delta < 60) return "just now"; if (delta < 3600) return `${Math.floor(delta / 60)}m ago`; if (delta < 86400) return `${Math.floor(delta / 3600)}h ago`; return `${Math.floor(delta / 86400)}d ago`;}