/** * Formatting utilities */ /** * Format a date as a relative time string. * @param dateString - ISO date string * @param compact - If true, use compact format ("2d" vs "2 days ago") */ export function formatTimeAgo(dateString: string, compact = false): string { const date = new Date(dateString); const now = new Date(); const diffMs = now.getTime() - date.getTime(); const diffMins = Math.floor(diffMs / 60000); const diffHours = Math.floor(diffMs / 3600000); const diffDays = Math.floor(diffMs / 86400000); if (compact) { if (diffMins < 1) return 'now'; if (diffMins < 60) return `${diffMins}m`; if (diffHours < 24) return `${diffHours}h`; if (diffDays < 7) return `${diffDays}d`; if (diffDays < 365) return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric' }); return date.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' }); } if (diffMins < 1) return 'just now'; if (diffMins < 60) return `${diffMins} minute${diffMins === 1 ? '' : 's'} ago`; if (diffHours < 24) return `${diffHours} hour${diffHours === 1 ? '' : 's'} ago`; if (diffDays === 1) return 'yesterday'; if (diffDays < 30) return `${diffDays} day${diffDays === 1 ? '' : 's'} ago`; return date.toLocaleDateString(); } /** * Extract the domain from a URL, removing "www." prefix */ export function getDomain(url: string): string { try { return new URL(url).hostname.replace(/^www\./, ''); } catch { return url; } }