From d123f6cc62d067c34248c29d9248c955727ed1f4 Mon Sep 17 00:00:00 2001 From: AMelonInsideLemon <166175391+AMelonInsideLemon@users.noreply.github.com> Date: Fri, 4 Apr 2025 03:22:32 +0200 Subject: [PATCH] correct rotation timestamp --- .../dynamic/worldStateController.ts | 3 ++- src/helpers/worlstateHelper.ts | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/controllers/dynamic/worldStateController.ts b/src/controllers/dynamic/worldStateController.ts index 82313183..1c738117 100644 --- a/src/controllers/dynamic/worldStateController.ts +++ b/src/controllers/dynamic/worldStateController.ts @@ -11,6 +11,7 @@ import { config } from "@/src/services/configService"; import { CRng } from "@/src/services/rngService"; import { ExportNightwave, ExportRegions } from "warframe-public-export-plus"; import { + getTorontoTimeAtHour, missionTags, sortieBosses, sortieBossNode, @@ -165,7 +166,7 @@ export const worldStateController: RequestHandler = (req, res) => { // Sortie cycling every day { - const dayStart = EPOCH + day * 86400000; + const dayStart = getTorontoTimeAtHour(EPOCH + day * 86400000, 12); const dayEnd = dayStart + 86400000; const rng = new CRng(day); diff --git a/src/helpers/worlstateHelper.ts b/src/helpers/worlstateHelper.ts index 4b4554f0..e6d83b74 100644 --- a/src/helpers/worlstateHelper.ts +++ b/src/helpers/worlstateHelper.ts @@ -112,3 +112,29 @@ export const sortieBossNode: Record = { SORTIE_BOSS_LEPHANTIS: "SolNode712", SORTIE_BOSS_INFALAD: "SolNode705" }; + +// ChatGPT generated that. And seems it works fine +export const getTorontoTimeAtHour = (date: number, hour: number): number => { + const formatter = new Intl.DateTimeFormat("en-US", { + timeZone: "America/Toronto", + year: "numeric", + month: "2-digit", + day: "2-digit" + }); + + const parts = formatter.formatToParts(date).reduce>((acc, { type, value }) => { + if (["year", "month", "day"].includes(type)) { + acc[type] = value; + } + return acc; + }, {}); + + const assumedLocalDate = new Date( + `${parts.year}-${parts.month}-${parts.day}T${hour.toString().padStart(2, "0")}:00:00` + ); + + const localDate = new Date(assumedLocalDate.toLocaleString("en-US", { timeZone: "America/Toronto" })); + const offsetMs = assumedLocalDate.getTime() - localDate.getTime(); + + return assumedLocalDate.getTime() + offsetMs; +};