Files
egfh-website/src/lib/events.ts
T
2026-06-20 17:37:29 -04:00

30 lines
1.1 KiB
TypeScript

import type { EventItem } from './fallback-data';
function isDateOnly(value: string): boolean {
return /^\d{4}-\d{2}-\d{2}$/.test(value);
}
function getEventEndTime(event: EventItem): number {
const value = event.end_datetime || event.start_datetime;
const timestamp = new Date(isDateOnly(value) ? `${value}T23:59:59` : value).getTime();
return Number.isFinite(timestamp) ? timestamp : 0;
}
function getEventStartTime(event: EventItem): number {
const value = event.start_datetime;
const timestamp = new Date(isDateOnly(value) ? `${value}T00:00:00` : value).getTime();
return Number.isFinite(timestamp) ? timestamp : 0;
}
export function isUpcomingEvent(event: EventItem, now = new Date()): boolean {
return getEventEndTime(event) >= now.getTime();
}
export function sortEventsByStartDate(events: EventItem[]): EventItem[] {
return [...events].sort((left, right) => getEventStartTime(left) - getEventStartTime(right));
}
export function getUpcomingEvents(events: EventItem[], now = new Date()): EventItem[] {
return sortEventsByStartDate(events.filter((event) => isUpcomingEvent(event, now)));
}