
ما هو الطابع الزمني Unix؟ دليل المطوّر
يعدّ الطابع الزمني Unix الثواني منذ 1970. تعرّف ما هو ولماذا تستخدمه الحواسيب وكيف تحوّله إلى تاريخ حقيقي.
الطابع الزمني Unix هو ببساطة عدد الثواني التي مرّت منذ منتصف ليل 1 يناير 1970 بتوقيت UTC. يبدو كرقم طويل مثل 1735689600، وهو الطريقة التي تخزّن بها معظم الحواسيب وقواعد البيانات وواجهات API لحظة زمنية خلف الكواليس.
لماذا تعدّ الحواسيب من 1970
نقطة البداية تلك — المسمّاة «حقبة Unix» — اختارها مبتكرو نظام Unix كصفر بسيط وعالمي. تخزين الوقت كرقم واحد يجعل مقارنة التواريخ وترتيبها وإجراء العمليات عليها سهلًا دون القلق بشأن المناطق الزمنية أو غرائب التقويم.
ثوانٍ مقابل ميلي ثانية
هناك مصدر التباس شائع يستحق المعرفة:
| الوحدة | الطول المعتاد |
|---|---|
| ثوانٍ | 10 أرقام (تستخدمها معظم الأنظمة). |
| ميلي ثانية | 13 رقمًا (يستخدمها JavaScript). |
أين ستصادف الطوابع الزمنية
- ملفات السجلّات التي تسجّل متى وقع حدث بالضبط.
- حقول قواعد البيانات التي تخزّن أوقات «الإنشاء» و«التحديث».
- استجابات API التي تعيد التواريخ كأرقام.
- رموز مثل JWT التي تستخدم الطوابع الزمنية للانتهاء.
مشكلة عام 2038
تخزّن الأنظمة القديمة الطوابع الزمنية في رقم 32 بت ينتهي في يناير 2038. الأنظمة الحديثة 64 بت لها مدى غير محدود عمليًا، فهي مشكلة معروفة لكنها محلولة إلى حدّ كبير.
حوّل طابعًا زمنيًا فورًا
الطوابع الخام غير مقروءة للبشر، لذا المحوّل ضروري. يحوّل محوّل الطابع الزمني Unix أي طابع إلى تاريخ محلي و UTC والعكس، ولقياس الفارق بين تاريخين تتولّى حاسبة الفرق بين تاريخين الباقي. وللتاريخ الكامل والتفصيل التقني، مقالة ويكيبيديا عن وقت Unix مرجع شامل. بمجرد أن تتعرّف على النمط، يتوقّف ذلك الرقم الطويل عن كونه لغزًا.
التحويل الصحيح في JavaScript
يستعمل JavaScript الميلي ثانية بينما تعيد واجهات كثيرة ثواني Unix. حوّل الثواني بـnew Date(seconds * 1000)، وللعكس استعمل Math.floor(date.getTime() / 1000). افحص الوحدة قبل الحساب؛ عشرة أرقام تعني غالباً ثواني و13 رقماً تعني غالباً ميلي ثانية، لكن الطول وحده ليس تحققاً كاملاً.
الطابع الزمني ليس منطقة زمنية
يمثل الطابع لحظة واحدة، أما UTC والوقت المحلي فهما طريقتان لعرضها. خزّن اللحظة بصيغة ثابتة واحتفظ باسم المنطقة الزمنية منفصلاً عندما يهم سلوك المواعيد المستقبلية. الإزاحة مثل +01:00 لا تحتوي قواعد التوقيت الصيفي.
أخطاء شائعة
- ضرب الميلي ثانية في 1000 مرة أخرى.
- قراءة تاريخ نصي بلا إزاحة واضحة.
- استعمال منتصف الليل المحلي بدل UTC.
- ترتيب نصوص تواريخ منسقة بدل اللحظات.
- افتراض أن كل قاعدة بيانات تدعم المدى نفسه.
مشكلة 2038 بدقة
تؤثر المشكلة الكلاسيكية في العدادات الموقعة 32 بت التي تبلغ حدها في 19 يناير 2038 بتوقيت UTC. ليس كل نظام حديث آمناً تلقائياً؛ قد تبقى حقول ضيقة في قواعد البيانات والأجهزة والملفات والتكاملات. اختبر مسار البيانات كاملاً بتواريخ تتجاوز الحد.
قائمة تشخيص
- سجل القيمة الخام والوحدة.
- حوّلها إلى ISO 8601 بتوقيت UTC.
- قارن المنطقة الزمنية وقواعد التوقيت الصيفي.
- أعد التحويل وتحقق من الدقة.
- اختبر الحقبة واليوم الكبيس والحدود.
لا تعتمد على وقت يرسله المتصفح وحده للسماح بالوصول أو ترتيب معاملات مالية أو إثبات وقت حدث. العمليات الحساسة تحتاج وقتاً من خادم موثوق وهامشاً مقصوداً لاختلاف الساعات.