From ae3fcaf9e9f4b0f72d5664eb408291c7a4e6e70b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Hatcher?= Date: Tue, 11 Nov 2025 06:56:45 +0100 Subject: [PATCH] FIX: New workbooks are created in the users TZ falling back to UTC --- webapp/app.ironcalc.com/frontend/src/App.tsx | 3 ++- .../frontend/src/components/storage.ts | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/webapp/app.ironcalc.com/frontend/src/App.tsx b/webapp/app.ironcalc.com/frontend/src/App.tsx index a55c4c7..402db67 100644 --- a/webapp/app.ironcalc.com/frontend/src/App.tsx +++ b/webapp/app.ironcalc.com/frontend/src/App.tsx @@ -10,6 +10,7 @@ import { uploadFile, } from "./components/rpc"; import { + createModelWithSafeTimezone, createNewModel, deleteModelByUuid, deleteSelectedModel, @@ -65,7 +66,7 @@ function App() { const newModel = loadSelectedModelFromStorage(); if (!newModel) { setShowWelcomeDialog(true); - const createdModel = new Model("template", "en", "UTC"); + const createdModel = createModelWithSafeTimezone(); setModel(createdModel); } else { setModel(newModel); diff --git a/webapp/app.ironcalc.com/frontend/src/components/storage.ts b/webapp/app.ironcalc.com/frontend/src/components/storage.ts index 7bdb6b2..14833a1 100644 --- a/webapp/app.ironcalc.com/frontend/src/components/storage.ts +++ b/webapp/app.ironcalc.com/frontend/src/components/storage.ts @@ -85,11 +85,21 @@ function getNewName(existingNames: string[]): string { return "Workbook-Infinity"; } +export function createModelWithSafeTimezone(): Model { + try { + const tz = Intl.DateTimeFormat().resolvedOptions().timeZone; + return new Model("template", "en", tz); + } catch { + console.warn("Failed to get timezone, defaulting to UTC"); + return new Model("template", "en", "UTC"); + } +} + export function createNewModel(): Model { const models = getModelsMetadata(); const name = getNewName(Object.values(models).map((m) => m.name)); - const model = new Model(name, "en", "UTC"); + const model = createModelWithSafeTimezone(); const uuid = randomUUID(); localStorage.setItem("selected", uuid); localStorage.setItem(uuid, bytesToBase64(model.toBytes()));