From d59b8fd6d9233c09d96cbad6b40080fd2c18237a Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Wed, 8 Nov 2023 16:44:23 +0000 Subject: [PATCH] fix(site): fix daylight savings date range issue --- .../TemplateInsightsPage.tsx | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx index adf36d7a8079d..8a2d29a4796fb 100644 --- a/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx +++ b/site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx @@ -68,10 +68,13 @@ export default function TemplateInsightsPage() { setSearchParams(searchParams); }; + // date ranges can have different offsets because of daylight savings so to + // avoid that we are going to use a common offset + const baseOffset = dateRange.endDate.getTimezoneOffset(); const commonFilters = { template_ids: template.id, - start_time: toISOLocal(dateRange.startDate), - end_time: toISOLocal(dateRange.endDate), + start_time: toISOLocal(dateRange.startDate, baseOffset), + end_time: toISOLocal(dateRange.endDate, baseOffset), }; const insightsFilter = { ...commonFilters, interval }; @@ -782,6 +785,19 @@ function formatTime(seconds: number): string { } } -function toISOLocal(d: Date) { - return format(d, "yyyy-MM-dd'T'HH:mm:ssxxx"); +function toISOLocal(d: Date, offset: number) { + return format(d, `yyyy-MM-dd'T'HH:mm:ss${formatOffset(offset)}`); +} + +function formatOffset(offset: number): string { + const isPositive = offset >= 0; + const absoluteOffset = Math.abs(offset); + const hours = Math.floor(absoluteOffset / 60); + const minutes = Math.abs(offset) % 60; + const formattedHours = `${isPositive ? "+" : "-"}${String(hours).padStart( + 2, + "0", + )}`; + const formattedMinutes = String(minutes).padStart(2, "0"); + return `${formattedHours}:${formattedMinutes}`; }