mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 17:51:12 -05:00
47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import { format } from 'date-fns';
|
|
import { parseDateForDisplay } from '@/lib/dateUtils';
|
|
import type { DatePrecision } from './flexible-date-input';
|
|
|
|
interface FlexibleDateDisplayProps {
|
|
date?: string | Date | null;
|
|
precision?: DatePrecision;
|
|
fallback?: string;
|
|
className?: string;
|
|
}
|
|
|
|
export function FlexibleDateDisplay({
|
|
date,
|
|
precision = 'day',
|
|
fallback = 'Unknown',
|
|
className
|
|
}: FlexibleDateDisplayProps) {
|
|
if (!date) {
|
|
return <span className={className || "text-muted-foreground"}>{fallback}</span>;
|
|
}
|
|
|
|
// ⚠️ IMPORTANT: Use parseDateForDisplay to prevent timezone shifts
|
|
// YYYY-MM-DD strings must be interpreted as local dates, not UTC
|
|
const dateObj = parseDateForDisplay(date);
|
|
|
|
// Check for invalid date
|
|
if (isNaN(dateObj.getTime())) {
|
|
return <span className={className || "text-muted-foreground"}>{fallback}</span>;
|
|
}
|
|
|
|
let formatted: string;
|
|
switch (precision) {
|
|
case 'year':
|
|
formatted = format(dateObj, 'yyyy');
|
|
break;
|
|
case 'month':
|
|
formatted = format(dateObj, 'MMMM yyyy');
|
|
break;
|
|
case 'day':
|
|
default:
|
|
formatted = format(dateObj, 'PPP');
|
|
break;
|
|
}
|
|
|
|
return <span className={className}>{formatted}</span>;
|
|
}
|