From 17093e3d25cf2ae28d50642918d42aba7a2356ef Mon Sep 17 00:00:00 2001 From: mandalore Date: Fri, 4 Sep 2026 16:19:00 -0500 Subject: [PATCH] Fix awkward multi-day event date formatting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same-month ranges were rendering as e.g. "Sat, Oct 10, 2026 – 11" (full start date, then a bare trailing day number for the end). Now: single day "Sat, Oct 17, 2026", same-month range "Oct 10–11, 2026", cross-month "Oct 30 – Nov 1, 2026", cross-year "Dec 30, 2026 – Jan 2, 2027". Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK --- sites/events/src/main.js | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) 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}`; }