diff --git a/sites/events/src/main.js b/sites/events/src/main.js index 0e07cf0..bbfa59f 100644 --- a/sites/events/src/main.js +++ b/sites/events/src/main.js @@ -114,15 +114,25 @@ function esc(s) { function fmtDateRange(startIso, endIso) { const start = new Date(startIso); - const opts = { weekday: "short", month: "short", day: "numeric", year: "numeric" }; - const startStr = start.toLocaleDateString(undefined, opts); - if (!endIso) return startStr; - const end = new Date(endIso); - if (start.toDateString() === end.toDateString()) return startStr; - const sameMonth = start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear(); - const endStr = sameMonth - ? end.toLocaleDateString(undefined, { day: "numeric" }) - : end.toLocaleDateString(undefined, opts); + const end = endIso ? new Date(endIso) : null; + + // Single day: "Sat, Oct 17, 2026" + if (!end || start.toDateString() === end.toDateString()) { + return start.toLocaleDateString(undefined, { weekday: "short", month: "short", day: "numeric", year: "numeric" }); + } + + const sameYear = start.getFullYear() === end.getFullYear(); + const sameMonth = sameYear && start.getMonth() === end.getMonth(); + + // Same month: "Oct 10–11, 2026" + if (sameMonth) { + const month = start.toLocaleDateString(undefined, { month: "short" }); + return `${month} ${start.getDate()}–${end.getDate()}, ${end.getFullYear()}`; + } + + // Different month (or year): "Oct 30 – Nov 1, 2026" / "Dec 30, 2026 – Jan 2, 2027" + const startStr = start.toLocaleDateString(undefined, { month: "short", day: "numeric", year: sameYear ? undefined : "numeric" }); + const endStr = end.toLocaleDateString(undefined, { month: "short", day: "numeric", year: "numeric" }); return `${startStr} – ${endStr}`; }