Todas las notas

, de Schoolify 2.0

8 de 9 entornos de ejecución tenían mal la zona horaria de BC

Columbia Británica dejó de cambiar sus relojes en 2026. La mayoría del software que revisé todavía no se enteró.

Columbia Británica pasó a horario de verano permanente el 8 de marzo de 2026. Vancouver ahora está en UTC-7 todo el año, y los relojes no retroceden el 1 de noviembre. Para una app estudiantil que muestra horarios de clases, una hora de diferencia significa que todo el producto está mal, así que antes de confiar en nada revisé qué creía cada parte del stack de Schoolify 2.0.

Qué medí

Nueve entornos de ejecución: las versiones de Node en uso, navegadores, el motor de React Native, Deno para las funciones edge y Postgres en la base de datos. A cada uno se le preguntó qué hora es en Vancouver el 1 de diciembre de 2026. Ocho se equivocaron.

  • Postgres 17.6 en la base de datos fue el peor, todavía con datos de zona horaria de 2025.
  • Node 22 incluye datos 2026a y aun así retrocede a UTC-8 el 2 de noviembre.
  • Solo una imagen pasó, una build reciente de Node 24, así que ahora CI fija exactamente esa imagen.

Incluso los datos corregidos son una solución provisional

Las versiones de la base de datos de zonas horarias que sí conocen el cambio lo registran como si empezara el 1 de noviembre de 2026, no el 8 de marzo. Simplemente se saltan el retroceso. Así que una hora de Vancouver entre marzo y noviembre puede seguir saliendo con una hora de diferencia, incluso en software actualizado.

Qué hace la app en su lugar

// 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;

Al iniciar, la app ejecuta una comprobación como esta. Si los datos del entorno de ejecución están desactualizados, cambia a una regla fija para Vancouver que viene incluida con la app. A la base de datos nunca se le pide que convierta una hora local de Vancouver.

La lección

Las zonas horarias parecen un problema resuelto, y por eso mismo nadie las revisa. Si tus usuarios están en BC, ejecuta la prueba anterior en tu propio stack.