La Colombie-Britannique est passée à l'heure d'été permanente le 8 mars 2026. Vancouver est maintenant en UTC-7 toute l'année, et les horloges ne reculent plus le 1er novembre. Pour une appli étudiante qui affiche des horaires de cours, une heure de décalage suffit à rendre tout le produit faux, alors avant de faire confiance à quoi que ce soit, j'ai vérifié ce que chaque partie de la stack de Schoolify 2.0 croyait.
Ce que j'ai mesuré
Neuf environnements d'exécution : les versions de Node utilisées, les navigateurs, le moteur React Native, Deno pour les fonctions edge et Postgres dans la base de données. On a demandé à chacun quelle heure il était à Vancouver le 1er décembre 2026. Huit se sont trompés.
- Postgres 17.6 dans la base de données était le pire, encore sur des données de fuseau horaire de 2025.
- Node 22 embarque les données 2026a et revient quand même à UTC-8 le 2 novembre.
- Une seule image a réussi, une build récente de Node 24, donc la CI épingle maintenant exactement cette image.
Même les données corrigées sont une rustine
Les versions amont de la base de données des fuseaux horaires qui connaissent le changement l'enregistrent comme commençant le 1er novembre 2026, pas le 8 mars. Elles sautent simplement le retour en arrière. Donc une heure de Vancouver entre mars et novembre peut encore sortir décalée d'une heure, même sur un logiciel à jour.
Ce que fait l'appli à la place
// 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;
Au démarrage, l'appli lance une vérification comme celle-ci. Si les données de l'environnement sont obsolètes, elle bascule vers une règle fixe pour Vancouver livrée avec l'appli. La base de données n'est jamais sollicitée pour convertir une heure locale de Vancouver.
La leçon
Les fuseaux horaires ont l'air d'un problème résolu, ce qui est exactement pourquoi personne ne vérifie. Si vos utilisateurs sont en C.-B., lancez le test ci-dessus sur votre propre stack.