feat: Implement timezone-independent date picker

This commit is contained in:
gpt-engineer-app[bot]
2025-11-05 16:31:51 +00:00
parent c966b6c5ee
commit 7c35f2932b
5 changed files with 248 additions and 20 deletions

View File

@@ -59,6 +59,8 @@ export interface FilterState {
maxReviews?: number;
openingYearStart: number | null;
openingYearEnd: number | null;
openingDateFrom?: string | null;
openingDateTo?: string | null;
}
export interface SortState {
@@ -85,6 +87,8 @@ const initialFilters: FilterState = {
maxReviews: 1000,
openingYearStart: null,
openingYearEnd: null,
openingDateFrom: null,
openingDateTo: null,
};
const initialSort: SortState = {
@@ -213,13 +217,26 @@ export default function Parks() {
}
}
// Opening year filter
if (filters.openingYearStart || filters.openingYearEnd) {
const openingYear = park.opening_date ? parseInt(park.opening_date.split("-")[0]) : null;
if (openingYear) {
if (filters.openingYearStart && openingYear < filters.openingYearStart) return false;
if (filters.openingYearEnd && openingYear > filters.openingYearEnd) return false;
} else if (filters.openingYearStart || filters.openingYearEnd) {
// Opening date filter (timezone-independent)
if (filters.openingDateFrom || filters.openingDateTo || filters.openingYearStart || filters.openingYearEnd) {
if (!park.opening_date) {
return false;
}
// Full date filtering (if date range is set)
if (filters.openingDateFrom && park.opening_date < filters.openingDateFrom) {
return false;
}
if (filters.openingDateTo && park.opening_date > filters.openingDateTo) {
return false;
}
// Year-only filtering (for backward compatibility)
const openingYear = parseInt(park.opening_date.split("-")[0]);
if (filters.openingYearStart && openingYear < filters.openingYearStart) {
return false;
}
if (filters.openingYearEnd && openingYear > filters.openingYearEnd) {
return false;
}
}

View File

@@ -233,16 +233,17 @@ export default function Rides() {
return false;
}
// Opening date filter
// Opening date filter (timezone-independent string comparison)
if (filters.openingDateFrom || filters.openingDateTo) {
if (!ride.opening_date) {
return false;
}
const openingDate = new Date(ride.opening_date);
if (filters.openingDateFrom && openingDate < filters.openingDateFrom) {
// Direct YYYY-MM-DD string comparison (lexicographically correct)
if (filters.openingDateFrom && ride.opening_date < filters.openingDateFrom) {
return false;
}
if (filters.openingDateTo && openingDate > filters.openingDateTo) {
if (filters.openingDateTo && ride.opening_date > filters.openingDateTo) {
return false;
}
}