@@ -68,10 +68,13 @@ export default function TemplateInsightsPage() {
68
68
setSearchParams ( searchParams ) ;
69
69
} ;
70
70
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 ( ) ;
71
74
const commonFilters = {
72
75
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 ) ,
75
78
} ;
76
79
77
80
const insightsFilter = { ...commonFilters , interval } ;
@@ -782,6 +785,19 @@ function formatTime(seconds: number): string {
782
785
}
783
786
}
784
787
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 } ` ;
787
803
}
0 commit comments