يعدّ الطابع الزمني Unix عدد الثواني التي مضت منذ الساعة 00:00:00 بالتوقيت UTC في 1 يناير 1970، أي "حقبة Unix" (Unix epoch). وهو الطريقة التي تحفظ بها معظم قواعد البيانات وواجهات API وملفات السجل لحظةً زمنية، لأنه رقم واحد لا لبس فيه، بخلاف نص التاريخ الذي يعتمد على المنطقة الزمنية أو الصيغة.
كيف تعمل
يأخذ المحوّل الرقم الذي تدخله على أنه ثوانٍ منذ الحقبة ويضيفه إلى 1 يناير 1970 الساعة 00:00:00 بالتوقيت UTC.
تُعرض النتيجة بصيغة ISO 8601 (المعيار الذي تتوقعه معظم واجهات API)، ونص UTC مقروء، وما يعادلها بالميلي ثانية (وهو ما يستخدمه كائن Date في JavaScript داخليًا)، ويوم الأسبوع.
كل شيء هنا يُحسب بالتوقيت UTC عن قصد: فتحويله إلى المنطقة الزمنية المحلية لمن يشاهد الصفحة سيجعلها تُعرض بشكل مختلف لكل زائر ولكل خادم، وهذا يُبطل الغاية من كون الطابع الزمني لا لبس فيه.
مثال محلول
يتحول الطابع الزمني 1735689600 إلى 2025-01-01T00:00:00.000Z، أي منتصف ليل UTC في أول يوم من عام 2025، وهو أيضًا 1735689600000 بالميلي ثانية، وهي الصيغة التي تتوقعها معظم شيفرات JavaScript.
أمثلة إضافية
الطابع 1790000000 هو الاثنين 21 سبتمبر 2026 الساعة 14:13:20 بالتوقيت UTC. وأكبر طابع زمني موقّع بـ 32 بت، وهو 2147483647، هو الثلاثاء 19 يناير 2038 الساعة 03:14:07 بالتوقيت UTC، لحظة "مشكلة عام 2038".
أخطاء شائعة
- الخلط بين الثواني والميلي ثانية: فالقيمة المكوّنة من 13 رقمًا هي بالميلي ثانية.
- عرض UTC على أنه توقيت محلي دون تحويل.
- تخزين تواريخ مستقبلية في طوابع زمنية بـ 32 بت تتجاوز حدّها بعد 19 يناير 2038.
- افتراض أن وقت Unix يحتسب الثواني الكبيسة؛ فهو لا يحتسبها.
أسئلة يطرحها الناس
لماذا يبدو طابعي الزمني أصغر بـ 1,000 مرة مما تتوقعه شيفرتي؟
الطوابع الزمنية Unix معرّفة بالثواني، لكن Date.now() في JavaScript وكثيرًا من واجهات الويب تستخدم الميلي ثانية. فإذا بدا رقمك صغيرًا على غير المعتاد فاضربه في 1,000؛ وإذا بدا كبيرًا على غير المعتاد (13 رقمًا بدل 10) فهو بالميلي ثانية أصلًا. اقسمه على 1,000 قبل استخدامه هنا.
ماذا يحدث بعد عام 2038؟
الأنظمة التي تخزّن الطابع الزمني Unix كعدد صحيح موقّع بـ 32 بت ستتجاوز حدّها في 19 يناير 2038، فيما يُعرف بـ "مشكلة عام 2038". وتستخدم معظم الأنظمة الحديثة أعدادًا صحيحة بـ 64 بت فلا تتأثر، لكن يجدر التحقق من البنية التحتية الأقدم.
هل يمكن أن يكون الطابع الزمني Unix سالبًا؟
نعم. فالقيمة السالبة تمثّل لحظة قبل 1 يناير 1970. وتدعم معظم الأنظمة ذلك، لكن بعض الأنظمة الأقدم أو المضمّنة لا تدعمه.
كيف أحصل على الطابع الزمني Unix الحالي؟
في JavaScript: Math.floor(Date.now() / 1000). وفي Python: int(time.time()). وفي طرفية Linux أو macOS: date +%s. وكلها تعيد عدد الثواني منذ 1 يناير 1970 بالتوقيت UTC.
هل يتضمن الطابع الزمني Unix منطقة زمنية؟
لا. فالطابع الزمني Unix هو دائمًا عدد الثواني منذ اللحظة نفسها بالتوقيت UTC، فيعني اللحظة ذاتها في كل مكان. ولا تهم المنطقة الزمنية إلا عند عرضه كتاريخ ووقت محليين.