/** Default timezone used to resolve relative dates like "today". */ export const defaultLocationTimeZone = 'UTC' export function calendarDateInTimeZone(date: Date, timeZone: string): string { return new Intl.DateTimeFormat('en-CA', { timeZone, year: 'numeric', month: '2-digit', day: '2-digit', }).format(date) } export function addCalendarDays(calendarDate: string, days: number): string { const parts = calendarDate.split('-').map(Number) const shifted = new Date(Date.UTC(parts[0], parts[1] - 1, parts[2] + days)) const year = shifted.getUTCFullYear() const month = String(shifted.getUTCMonth() + 1).padStart(2, '0') const day = String(shifted.getUTCDate()).padStart(2, '0') return year + '-' + month + '-' + day } /** Resolve "today" / "tomorrow" / "yesterday" / explicit YYYY-MM-DD input to a calendar date. */ export function resolveDate( input: unknown, now: Date = new Date(), timeZone: string = defaultLocationTimeZone, ): string { const value = String(input || '') .trim() .toLowerCase() const today = calendarDateInTimeZone(now, timeZone) if (!value || value === 'today') return today if (value === 'tomorrow') return addCalendarDays(today, 1) if (value === 'yesterday') return addCalendarDays(today, -1) return value }