| 1 | class AppDateUtils { |
| 2 | AppDateUtils._(); |
| 3 | |
| 4 | static String formatTimestamp(DateTime dateTime) { |
| 5 | final now = DateTime.now(); |
| 6 | final diff = now.difference(dateTime); |
| 7 | |
| 8 | if (diff.inMinutes < 1) return 'Just now'; |
| 9 | if (diff.inMinutes < 60) return '${diff.inMinutes}m ago'; |
| 10 | if (diff.inHours < 24) return '${diff.inHours}h ago'; |
| 11 | if (diff.inDays == 1) return 'Yesterday'; |
| 12 | if (diff.inDays < 7) return '${diff.inDays}d ago'; |
| 13 | if (diff.inDays < 30) return '${(diff.inDays / 7).ceil()}w ago'; |
| 14 | return '${dateTime.month}/${dateTime.day}/${dateTime.year}'; |
| 15 | } |
| 16 | |
| 17 | static String formatDate(DateTime dateTime) { |
| 18 | return '${_monthName(dateTime.month)} ${dateTime.day}, ${dateTime.year}'; |
| 19 | } |
| 20 | |
| 21 | static String formatTime(DateTime dateTime) { |
| 22 | final h = dateTime.hour % 12 == 0 ? 12 : dateTime.hour % 12; |
| 23 | final m = dateTime.minute.toString().padLeft(2, '0'); |
| 24 | final ampm = dateTime.hour < 12 ? 'AM' : 'PM'; |
| 25 | return '$h:$m $ampm'; |
| 26 | } |
| 27 | |
| 28 | static String formatDuration(Duration duration) { |
| 29 | if (duration.inSeconds < 60) return '${duration.inSeconds}s'; |
| 30 | if (duration.inMinutes < 60) { |
| 31 | return '${duration.inMinutes}m ${duration.inSeconds % 60}s'; |
| 32 | } |
| 33 | return '${duration.inHours}h ${duration.inMinutes % 60}m'; |
| 34 | } |
| 35 | |
| 36 | static String sectionLabel(DateTime dateTime) { |
| 37 | final now = DateTime.now(); |
| 38 | final today = DateTime(now.year, now.month, now.day); |
| 39 | final date = DateTime(dateTime.year, dateTime.month, dateTime.day); |
| 40 | final diff = today.difference(date).inDays; |
| 41 | |
| 42 | if (diff == 0) return 'TODAY'; |
| 43 | if (diff == 1) return 'YESTERDAY'; |
| 44 | if (diff < 7) return 'PREVIOUS 7 DAYS'; |
| 45 | if (diff < 30) return 'PREVIOUS 30 DAYS'; |
| 46 | return 'OLDER'; |
| 47 | } |
| 48 | |
| 49 | static String _monthName(int month) { |
| 50 | const months = [ |
| 51 | 'Jan', |
| 52 | 'Feb', |
| 53 | 'Mar', |
| 54 | 'Apr', |
| 55 | 'May', |
| 56 | 'Jun', |
| 57 | 'Jul', |
| 58 | 'Aug', |
| 59 | 'Sep', |
| 60 | 'Oct', |
| 61 | 'Nov', |
| 62 | 'Dec', |
| 63 | ]; |
| 64 | return months[month - 1]; |
| 65 | } |
| 66 | } |