new Date().toISOString() returns UTC, causing the calendar to advance to the next day at 8pm EDT / 7pm EST. getTodayLocal() reads local wall-clock time and rolls back one day before 3am so the calendar stays on the current day through the night. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
/**
|
|
* Environment variable helpers.
|
|
*/
|
|
|
|
/**
|
|
* Parse a staleness window from an env var string (interpreted as hours).
|
|
* Falls back to `defaultHours` when the value is missing, non-numeric,
|
|
* non-finite, or <= 0 — preventing NaN from silently breaking staleness checks.
|
|
*/
|
|
export function parseStalenessHours(envVar: string | undefined, defaultHours: number): number {
|
|
const parsed = parseInt(envVar ?? "", 10);
|
|
return Number.isFinite(parsed) && parsed > 0 ? parsed : defaultHours;
|
|
}
|
|
|
|
/**
|
|
* Returns today's date as YYYY-MM-DD using local wall-clock time with a 3 AM
|
|
* switchover. Before 3 AM local time we still consider it "yesterday", so the
|
|
* calendar doesn't flip to the next day at midnight while people are still out
|
|
* at the park.
|
|
*
|
|
* Important: `new Date().toISOString()` returns UTC, which causes the date to
|
|
* advance at 8 PM EDT (UTC-4) or 7 PM EST (UTC-5) — too early. This helper
|
|
* corrects that by using local year/month/day components and rolling back one
|
|
* day when the local hour is before 3.
|
|
*/
|
|
export function getTodayLocal(): string {
|
|
const now = new Date();
|
|
if (now.getHours() < 3) {
|
|
now.setDate(now.getDate() - 1);
|
|
}
|
|
const y = now.getFullYear();
|
|
const m = String(now.getMonth() + 1).padStart(2, "0");
|
|
const d = String(now.getDate()).padStart(2, "0");
|
|
return `${y}-${m}-${d}`;
|
|
}
|