From 4744e74dfa9e6f202b91cc8664616ec272e6533b Mon Sep 17 00:00:00 2001 From: jtricerolph Date: Mon, 20 Jul 2026 13:45:50 +0000 Subject: [PATCH] =?UTF-8?q?Fix=20week=20nav=20arrows=20=E2=80=94=20use=20l?= =?UTF-8?q?ocal=20date=20string=20to=20avoid=20BST=20offset=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit toISOString() returns UTC, so midnight local in BST (UTC+1) lands on the previous UTC day, making each arrow step 6 days instead of 7. Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/pages/WeeklyActual.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/WeeklyActual.tsx b/frontend/src/pages/WeeklyActual.tsx index 89b3d216..5cc250b2 100644 --- a/frontend/src/pages/WeeklyActual.tsx +++ b/frontend/src/pages/WeeklyActual.tsx @@ -31,19 +31,22 @@ const MONTH_NAMES = ['January','February','March','April','May','June','July','A // ── Week navigation ──────────────────────────────────────────────────────── +function localDateStr(d: Date): string { + return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}` +} + function defaultWeekEnding(): string { const d = new Date() const day = d.getDay() - // Go back to the most recent Saturday (day=6→today, else go back) const daysBack = day === 6 ? 0 : day + 1 d.setDate(d.getDate() - daysBack) - return d.toISOString().split('T')[0] + return localDateStr(d) } function shiftWeek(dateStr: string, weeks: number): string { const d = new Date(dateStr + 'T00:00:00') d.setDate(d.getDate() + weeks * 7) - return d.toISOString().split('T')[0] + return localDateStr(d) } // ── Chart colours ──────────────────────────────────────────────────────────