From 898d1de8750342df00cd2df0ba263249e9405bb3 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Sat, 26 Jul 2025 19:24:08 -0500 Subject: [PATCH] Timezone fix (#19293) * Frontend timezone fixes Last recording date timezone was being applied twice, so it displayed the wrong date Also, TZDate from react-day-picker could have been behaving incorrectly at times without a full date string * Ensure returned day is parsed as midnight in specified timezone --- web/src/components/overlay/ReviewActivityCalendar.tsx | 4 ++-- web/src/views/system/StorageMetrics.tsx | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/web/src/components/overlay/ReviewActivityCalendar.tsx b/web/src/components/overlay/ReviewActivityCalendar.tsx index a0ffd0528..10617d3c9 100644 --- a/web/src/components/overlay/ReviewActivityCalendar.tsx +++ b/web/src/components/overlay/ReviewActivityCalendar.tsx @@ -50,7 +50,7 @@ export default function ReviewActivityCalendar({ } const parts = date.split("-"); - const cal = new TZDate(date, timezone); + const cal = new TZDate(date + "T00:00:00", timezone); cal.setFullYear( parseInt(parts[0]), @@ -70,7 +70,7 @@ export default function ReviewActivityCalendar({ } const parts = date.split("-"); - const cal = new TZDate(date, timezone); + const cal = new TZDate(date + "T00:00:00", timezone); cal.setFullYear( parseInt(parts[0]), diff --git a/web/src/views/system/StorageMetrics.tsx b/web/src/views/system/StorageMetrics.tsx index c24230d38..6ae40089a 100644 --- a/web/src/views/system/StorageMetrics.tsx +++ b/web/src/views/system/StorageMetrics.tsx @@ -13,6 +13,7 @@ import { FrigateConfig } from "@/types/frigateConfig"; import { useFormattedTimestamp, useTimezone } from "@/hooks/use-date-utils"; import { RecordingsSummary } from "@/types/review"; import { useTranslation } from "react-i18next"; +import { TZDate } from "react-day-picker"; type CameraStorage = { [key: string]: { @@ -66,9 +67,10 @@ export default function StorageMetrics({ const earliestDate = useMemo(() => { const keys = Object.keys(recordingsSummary || {}); return keys.length - ? new Date(keys[keys.length - 1]).getTime() / 1000 + ? new TZDate(keys[keys.length - 1] + "T00:00:00", timezone).getTime() / + 1000 : null; - }, [recordingsSummary]); + }, [recordingsSummary, timezone]); const timeFormat = config?.ui.time_format === "24hour" ? "24hour" : "12hour"; const format = useMemo(() => {