mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
Fix timezone issues with strftime (#5762)
* Fix timezone issues with strftime * Fix timezone adjustment * Fix bug
This commit is contained in:
parent
732e527401
commit
e454daf727
@ -56,7 +56,7 @@ export const formatUnixTimestampToDateTime = (unixTimestamp: number, config: Dat
|
||||
|
||||
// use strftime_fmt if defined in config file
|
||||
if (strftime_fmt) {
|
||||
const strftime_locale = strftime.localizeByIdentifier(locale);
|
||||
const strftime_locale = strftime.timezone(getUTCOffset(date, timezone)).localizeByIdentifier(locale);
|
||||
return strftime_locale(strftime_fmt, date);
|
||||
}
|
||||
|
||||
@ -114,3 +114,18 @@ export const getDurationFromTimestamps = (start_time: number, end_time: number |
|
||||
}
|
||||
return duration;
|
||||
};
|
||||
|
||||
/**
|
||||
* Adapted from https://stackoverflow.com/a/29268535 this takes a timezone string and
|
||||
* returns the offset of that timezone from UTC in minutes.
|
||||
* @param timezone string representation of the timezone the user is requesting
|
||||
* @returns number of minutes offset from UTC
|
||||
*/
|
||||
const getUTCOffset = (date: Date, timezone: string): number => {
|
||||
const utcDate = new Date(date.getTime() - (date.getTimezoneOffset() * 60 * 1000));
|
||||
// locale of en-CA is required for proper locale format
|
||||
let iso = utcDate.toLocaleString('en-CA', { timeZone: timezone, hour12: false }).replace(', ', 'T');
|
||||
iso += '.' + utcDate.getMilliseconds().toString().padStart(3, '0');
|
||||
const target = new Date(iso + 'Z');
|
||||
return (target.getTime() - utcDate.getTime()) / 60 / 1000;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user