/** * Date formatting utilities * Provides PDA-friendly date formatting and grouping */ import { format, isToday, isTomorrow, differenceInDays, isBefore } from "date-fns"; /** * Format a date in a readable format */ export function formatDate(date: Date): string { try { return format(date, "MMM d, yyyy"); } catch { return "Invalid Date"; } } /** * Format time in 12-hour format */ export function formatTime(date: Date): string { try { return format(date, "h:mm a"); } catch { return "Invalid Time"; } } /** * Get a PDA-friendly label for date grouping * Returns: "Today", "Tomorrow", "This Week", "Next Week", "Later" */ export function getDateGroupLabel(date: Date, referenceDate: Date = new Date()): string { if (isToday(date)) { return "Today"; } if (isTomorrow(date)) { return "Tomorrow"; } const daysUntil = differenceInDays(date, referenceDate); if (daysUntil >= 0 && daysUntil <= 7) { return "This Week"; } if (daysUntil > 7 && daysUntil <= 14) { return "Next Week"; } return "Later"; } /** * Check if a date has passed (PDA-friendly: "target passed" instead of "overdue") */ export function isPastTarget(targetDate: Date, now: Date = new Date()): boolean { return isBefore(targetDate, now); } /** * Check if a date is approaching (within 24 hours) */ export function isApproachingTarget(targetDate: Date, now: Date = new Date()): boolean { const hoursUntil = differenceInDays(targetDate, now); return hoursUntil >= 0 && hoursUntil <= 1; }