جميع الملاحظات

، من Schoolify 2.0

8 من أصل 9 بيئات تشغيل كانت تحمل منطقة زمنية خاطئة لكولومبيا البريطانية

توقفت كولومبيا البريطانية عن تغيير ساعتها في 2026. معظم البرمجيات التي فحصتها لم تعلم بذلك بعد.

انتقلت كولومبيا البريطانية إلى التوقيت الصيفي الدائم في 8 مارس 2026. أصبحت فانكوفر الآن على UTC-7 طوال العام، ولا تعود الساعات إلى الوراء في 1 نوفمبر. بالنسبة لتطبيق طلابي يعرض أوقات الحصص، فإن خطأ بساعة واحدة يعني أن المنتج بأكمله خاطئ، لذا قبل أن أثق بأي شيء، تحققت مما تعتقده كل بيئة تشغيل في بنية Schoolify 2.0.

ما الذي قمت بقياسه

تسع بيئات تشغيل: إصدارات Node المستخدمة، المتصفحات، محرك React Native، Deno الخاص بدوال الحافة، وPostgres في قاعدة البيانات. تم سؤال كل منها عن الوقت في فانكوفر بتاريخ 1 ديسمبر 2026. أخطأت ثمانية منها.

  • Postgres 17.6 في قاعدة البيانات كان الأسوأ، إذ لا يزال يعمل ببيانات المناطق الزمنية لعام 2025.
  • Node 22 يأتي ببيانات 2026a لكنه لا يزال يعود إلى UTC-8 في 2 نوفمبر.
  • صورة واحدة فقط نجحت، وهي إصدار حديث من Node 24، لذا أصبح CI الآن يثبّت تلك الصورة بالتحديد.

حتى البيانات المُصححة هي حل مؤقت

إصدارات قاعدة بيانات المناطق الزمنية الأصلية التي تعرف بالتغيير تسجله على أنه يبدأ في 1 نوفمبر 2026، وليس 8 مارس. فهي ببساطة تتخطى عودة الساعة إلى الوراء. لذلك يمكن أن يظل توقيت فانكوفر بين مارس ونوفمبر خاطئاً بساعة واحدة، حتى في البرمجيات المحدّثة.

ما يفعله التطبيق بدلاً من ذلك

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

عند بدء التشغيل، يقوم التطبيق بإجراء فحص كهذا. إذا كانت بيانات بيئة التشغيل قديمة، يتحول إلى قاعدة ثابتة لفانكوفر مضمّنة في التطبيق. ولا يُطلب من قاعدة البيانات أبداً تحويل توقيت فانكوفر المحلي على الإطلاق.

الدرس المستفاد

تبدو المناطق الزمنية وكأنها مشكلة محلولة، ولهذا السبب بالتحديد لا يتحقق منها أحد. إذا كان مستخدموك في كولومبيا البريطانية، شغّل الاختبار أعلاه على بنيتك الخاصة.