Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 645c4bd

Browse files
fix(site): fix daylight savings date range issue (coder#10595)
Close coder#10575
1 parent a328d20 commit 645c4bd

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

site/src/pages/TemplatePage/TemplateInsightsPage/TemplateInsightsPage.tsx

+20-4
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,13 @@ export default function TemplateInsightsPage() {
6868
setSearchParams(searchParams);
6969
};
7070

71+
// date ranges can have different offsets because of daylight savings so to
72+
// avoid that we are going to use a common offset
73+
const baseOffset = dateRange.endDate.getTimezoneOffset();
7174
const commonFilters = {
7275
template_ids: template.id,
73-
start_time: toISOLocal(dateRange.startDate),
74-
end_time: toISOLocal(dateRange.endDate),
76+
start_time: toISOLocal(dateRange.startDate, baseOffset),
77+
end_time: toISOLocal(dateRange.endDate, baseOffset),
7578
};
7679

7780
const insightsFilter = { ...commonFilters, interval };
@@ -782,6 +785,19 @@ function formatTime(seconds: number): string {
782785
}
783786
}
784787

785-
function toISOLocal(d: Date) {
786-
return format(d, "yyyy-MM-dd'T'HH:mm:ssxxx");
788+
function toISOLocal(d: Date, offset: number) {
789+
return format(d, `yyyy-MM-dd'T'HH:mm:ss${formatOffset(offset)}`);
790+
}
791+
792+
function formatOffset(offset: number): string {
793+
const isPositive = offset >= 0;
794+
const absoluteOffset = Math.abs(offset);
795+
const hours = Math.floor(absoluteOffset / 60);
796+
const minutes = Math.abs(offset) % 60;
797+
const formattedHours = `${isPositive ? "+" : "-"}${String(hours).padStart(
798+
2,
799+
"0",
800+
)}`;
801+
const formattedMinutes = String(minutes).padStart(2, "0");
802+
return `${formattedHours}:${formattedMinutes}`;
787803
}

0 commit comments

Comments
 (0)