2021-11-11 19:23:36 -08:00
|
|
|
export const determineTZ = (tz: string, userOverride = false): [string, boolean] => {
|
2021-05-30 14:04:58 -07:00
|
|
|
tz = tz.toUpperCase();
|
|
|
|
|
2021-11-11 19:23:36 -08:00
|
|
|
let overrode = false;
|
|
|
|
const shortHandUSTZ = (tz === "ET" || tz === "CT" || tz === "MT" || tz === "PT");
|
|
|
|
const fullUSTZ = (tz.length === 3 && (tz.startsWith("E") || tz.startsWith("C") || tz.startsWith("M") || tz.startsWith("P")) && (tz.endsWith("DT") || tz.endsWith("ST")));
|
|
|
|
|
|
|
|
if (!userOverride && (shortHandUSTZ || fullUSTZ)) {
|
2021-05-30 14:04:58 -07:00
|
|
|
const today = new Date();
|
|
|
|
const jan = new Date(today.getFullYear(), 0, 1);
|
|
|
|
const jul = new Date(today.getFullYear(), 6, 1);
|
|
|
|
if (today.getTimezoneOffset() < Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset())) {
|
2021-11-11 19:23:36 -08:00
|
|
|
if (tz.includes("S")) overrode = true;
|
2021-05-30 14:04:58 -07:00
|
|
|
tz = `${tz.substr(0, 1)}DT`;
|
|
|
|
} else {
|
2021-11-11 19:23:36 -08:00
|
|
|
if (tz.includes("D")) overrode = true;
|
2021-05-30 14:04:58 -07:00
|
|
|
tz = `${tz.substr(0, 1)}ST`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-11-11 19:23:36 -08:00
|
|
|
return [tz, overrode];
|
2021-05-30 14:04:58 -07:00
|
|
|
};
|