| 1 | import { format, isToday, isYesterday } from 'date-fns';
|
| 2 | import { ptBR } from 'date-fns/locale';
|
| 3 | import type { BadgeVariant } from '@/components/ui/Badge';
|
| 4 |
|
| 5 | type TimeBadgeVariant = 'morning' | 'afternoon' | 'night' | 'latenight';
|
| 6 |
|
| 7 | export const TIME_BADGES: Record<TimeBadgeVariant, { label: string; variant: BadgeVariant; }> = {
|
| 8 | morning: { label: 'Manhã', variant: "green" },
|
| 9 | afternoon: { label: 'Tarde', variant: "orange" },
|
| 10 | night: { label: 'Noite', variant: "blue" },
|
| 11 | latenight: { label: 'Madrugada', variant: "purple" },
|
| 12 | };
|
| 13 |
|
| 14 | export const getTimeBadge = (date: Date) => {
|
| 15 | const h = date.getHours();
|
| 16 | if (h >= 6 && h < 12) return TIME_BADGES.morning;
|
| 17 | if (h >= 12 && h < 18) return TIME_BADGES.afternoon;
|
| 18 | if (h >= 18 && h < 24) return TIME_BADGES.night;
|
| 19 | return TIME_BADGES.latenight;
|
| 20 | }
|
| 21 |
|
| 22 | export const formatMoment = (date: Date): string => {
|
| 23 | if (isToday(date)) return `Hoje às ${format(date, "HH'h'mm")}`;
|
| 24 | if (isYesterday(date)) return `Ontem às ${format(date, "HH'h'mm")}`;
|
| 25 | return format(date, "d 'de' MMM 'às' HH'h'mm", { locale: ptBR });
|
| 26 | }
|
| 27 |
|
| 28 | // When it's a raw date only field, it should output stuff like
|
| 29 | // Hoje, 10/10
|
| 30 | // Ontem, 09/10
|
| 31 | // 09/10/26
|
| 32 | export const formatDate = (date: Date): string => {
|
| 33 | if (isToday(date)) return `Hoje, ${format(date, "dd/MM")}`;
|
| 34 | if (isYesterday(date)) return `Ontem, ${format(date, "dd/MM")}`;
|
| 35 |
|
| 36 | return format(date, "dd/MM/yyyy", { locale: ptBR });
|
| 37 | }
|
| 38 |
|
| 39 | // Parse a date-only string (YYYY-MM-DD or ISO UTC midnight) as local noon
|
| 40 | // to prevent timezone offsets from shifting the calendar day
|
| 41 | export const parseDateOnly = (dateStr: string | Date): Date => {
|
| 42 | const iso = typeof dateStr === 'string' ? dateStr : dateStr.toISOString();
|
| 43 | return new Date(`${iso.slice(0, 10)}T12:00:00`);
|
| 44 | };
|