/** * Date utility functions for formatting and parsing dates */ export function formatDateTime(dateString) { if (!dateString) return ''; const date = new Date(dateString); const now = new Date(); const diffMs = now - date; const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24)); if (diffDays === 0) { return 'Today at ' + date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true }); } else if (diffDays === 1) { return 'Yesterday at ' + date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true }); } else if (diffDays < 7) { const dayName = date.toLocaleDateString('en-US', { weekday: 'long' }); return dayName + ' at ' + date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true }); } else { return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' }); } } export function formatTimeAgo(dateString) { if (!dateString) return ''; const date = new Date(dateString); const now = new Date(); const diffMs = now - date; const diffMins = Math.floor(diffMs / 60000); const diffHours = Math.floor(diffMs / 3600000); const diffDays = Math.floor(diffMs / 86400000); 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 < 30) return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`; const diffMonths = Math.floor(diffDays / 30); if (diffMonths < 12) return `${diffMonths} month${diffMonths > 1 ? 's' : ''} ago`; const diffYears = Math.floor(diffDays / 365); return `${diffYears} year${diffYears > 1 ? 's' : ''} ago`; } export function formatDuration(seconds) { if (!seconds || seconds < 0) return '0:00'; const hrs = Math.floor(seconds / 3600); const mins = Math.floor((seconds % 3600) / 60); const secs = Math.floor(seconds % 60); if (hrs > 0) { return `${hrs}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; } return `${mins}:${secs.toString().padStart(2, '0')}`; } export function parseDateRange(preset) { const now = new Date(); const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); switch (preset) { case 'today': return { start: today, end: new Date() }; case 'yesterday': const yesterday = new Date(today); yesterday.setDate(yesterday.getDate() - 1); return { start: yesterday, end: today }; case 'week': const weekStart = new Date(today); weekStart.setDate(weekStart.getDate() - 7); return { start: weekStart, end: new Date() }; case 'month': const monthStart = new Date(today); monthStart.setMonth(monthStart.getMonth() - 1); return { start: monthStart, end: new Date() }; case 'year': const yearStart = new Date(today); yearStart.setFullYear(yearStart.getFullYear() - 1); return { start: yearStart, end: new Date() }; default: return { start: null, end: null }; } }