All notes

, from Schoolify 2.0

8 of 9 runtimes had the wrong BC time zone

British Columbia stopped changing its clocks in 2026. Most of the software I checked has not heard yet.

British Columbia moved to permanent daylight time on March 8, 2026. Vancouver is now UTC-7 all year, and the clocks do not fall back on November 1. For a student app that shows class times, an hour off is the whole product being wrong, so before trusting anything I checked what each part of Schoolify 2.0's stack believed.

What I measured

Nine runtimes: the Node versions in use, browsers, the React Native engine, Deno for the edge functions and Postgres in the database. Each one was asked what time it is in Vancouver on December 1, 2026. Eight got it wrong.

  • Postgres 17.6 in the database was the worst, still on 2025 time zone data.
  • Node 22 ships 2026a data and still falls back to UTC-8 on November 2.
  • Only one image passed, a recent Node 24 build, so CI now pins that exact image.

Even the fixed data is a workaround

The upstream time zone database releases that do know about the change record it as starting November 1, 2026, not March 8. They simply skip the fall back. So a Vancouver time between March and November can still come out an hour off, even on up-to-date software.

What the app does instead

// Noon UTC on Dec 1, 2026 is 5:00 in Vancouver (UTC-7).
const parts = new Intl.DateTimeFormat('en-CA', {
  timeZone: 'America/Vancouver', hour: 'numeric', hourCycle: 'h23',
}).formatToParts(new Date('2026-12-01T12:00:00Z'));
const stale = Number(parts.find((p) => p.type === 'hour').value) !== 5;

At startup the app runs a check like this. If the runtime's data is stale, it switches to a fixed rule for Vancouver that ships with the app. The database is never asked to convert a local Vancouver time at all.

The lesson

Time zones feel like a solved problem, which is exactly why nobody checks. If your users are in BC, run the test above on your own stack.