export function calculateAge(birthDate: string): string { if (!birthDate) return ""; const birth = new Date(birthDate); const now = new Date(); let years = now.getFullYear() - birth.getFullYear(); let months = now.getMonth() - birth.getMonth(); let days = now.getDate() - birth.getDate(); if (days < 0) { months--; days += new Date(now.getFullYear(), now.getMonth(), 0).getDate(); } if (months < 0) { years--; months += 12; } const parts: string[] = []; if (years > 0) parts.push(`${years} year${years > 1 ? "s" : ""}`); if (months > 0) parts.push(`${months} month${months > 1 ? "s" : ""}`); if (days > 0) parts.push(`${days} day${days > 1 ? "s" : ""}`); return parts.length > 0 ? parts.join(", ") : "Newborn"; } export function formatAge(birthDate: string, measurementDate?: string): string { const birth = new Date(birthDate); const ref = measurementDate ? new Date(measurementDate) : new Date(); const totalDays = (ref.getTime() - birth.getTime()) / (1000 * 60 * 60 * 24); const years = Math.floor(totalDays / 365); const months = Math.floor((totalDays % 365) / 30); if (years > 0 && months > 0) return `${years}y ${months}mo`; if (years > 0) return `${years}y`; if (months > 0) return `${months}mo`; return "Newborn"; } export function formatTimeAgo(dateStr: string | null | undefined): string | null { if (!dateStr) return null; const diffMs = Date.now() - new Date(dateStr).getTime(); const mins = Math.floor(diffMs / 60_000); const hours = Math.floor(mins / 60); const days = Math.floor(hours / 24); if (mins < 1) return "just now"; if (mins < 60) return `${mins}m ago`; if (hours < 24) return `${hours}h ago`; return `${days}d ago`; }