Files
thrilltrack-explorer/src-old/components/ui/flexible-date-display.tsx

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>;
}