تطوير · مدة القراءة: 3 د ·
الطوابع الزمنية في Unix: ثوانٍ أم أجزاء من الألف من الثانية؟
خطأ الأرقام الثلاثة عشر الذي يصل إلى بيئة الإنتاج كل أسبوع، وقاعدة بسيطة جدًا للتمييز بين الوحدتين.

تتعامل JavaScript بأجزاء الألف من الثانية، ومعظم الخوادم بالثواني. اخلط بينهما وستجد تواريخك في يناير 1970، أو بعد عشرات آلاف السنين في المستقبل.
عُدّ الأرقام
الطابع الزمني الحالي بالثواني يتكوّن من 10 أرقام (1790000000 هو 21 سبتمبر 2026). واللحظة نفسها بأجزاء الألف من الثانية من 13 رقمًا، وبالميكروثانية من 16، وبالنانوثانية من 19.
القاعدة
إذا كانت القيمة المطلقة أكبر من 10¹² فهي بأجزاء الألف من الثانية، وإلا فاعتبرها ثواني. تصحّ القاعدة لأي طابع بأجزاء الألف من الثانية بعد سبتمبر 2001، ولأي طابع بالثواني قبل عام 33658.
const ms = Math.abs(n) > 1e12 ? n : n * 1000;
الطابع الزمني بلا منطقة زمنية
يعدّ طابع Unix الزمني الثواني منذ 1 يناير 1970 الساعة 00:00 UTC. العدد نفسه هو اللحظة نفسها في كل مكان في العالم؛ ما يتغير هو طريقة العرض فقط. تظهر الأخطاء عندما يُحوَّل الوقت المحلي إلى طابع زمني كأنه UTC، فتنزاح كل التواريخ بفارق منطقتك الزمنية، غالبًا ساعة أو ساعتين، ومرة أخرى عند تغيير التوقيت الصيفي. خزّن الطوابع الزمنية وأرسلها بتوقيت UTC، ولا تحوّلها إلى الوقت المحلي إلا عند عرضها على شخص.
الحصول على الوقت الحالي في لغات شائعة
JavaScript Date.now() ميلي ثانية
JavaScript Math.floor(Date.now() / 1000) ثوانٍ
Python time.time() ثوانٍ (مع كسر)
Java System.currentTimeMillis() ميلي ثانية
Go time.Now().Unix() ثوانٍ
PostgreSQL EXTRACT(EPOCH FROM now()) ثوانٍ
MySQL UNIX_TIMESTAMP() ثوانٍ
التواريخ قبل 1970 وعام 2038
الطوابع الزمنية السالبة صالحة: −86400 هو 31 ديسمبر 1969. بعض الأنظمة القديمة وجداول البيانات لا تتعامل معها، ولهذا تُعد تواريخ الميلاد والبيانات التاريخية مصدرًا شائعًا للأخطاء. وفي الطرف الآخر، ينتهي العدد الصحيح ذو الإشارة بطول 32 بت عند 2147483647، أي الساعة 03:14:07 UTC في 19 يناير 2038. الأنظمة التي ما زالت تخزّن الطوابع الزمنية بـ 32 بت ستعود إلى 1901؛ والتخزين بـ 64 بت يجنّب المشكلة لمليارات السنين.
الثواني الكبيسة
يتجاهل وقت Unix الثواني الكبيسة: كل يوم هو 86,400 ثانية بالضبط. هذا يُبقي الحساب بسيطًا، والفرق لا يهم في كل التطبيقات تقريبًا. وحدها الأنظمة التي تحتاج إلى فترات دقيقة تعبر ثانية كبيسة، مثل بعض الأنظمة العلمية أو المالية، عليها مراعاته.
قائمة تحقق سريعة لتصحيح الأخطاء
- التاريخ في يناير 1970: قيمة بالثواني قُرئت على أنها ميلي ثانية.
- السنة من خمسة أرقام: قيمة بالميلي ثانية قُرئت على أنها ثوانٍ.
- كل التواريخ منزاحة بالعدد نفسه من الساعات: عومل الوقت المحلي على أنه UTC، أو العكس.
- التواريخ منزاحة ساعة واحدة في جزء من السنة: جرى تجاهل تغيير التوقيت الصيفي.
- التواريخ تقفز إلى 1901: فيض عدد 32 بت.
اختر الوحدة صراحة
محوّل الطوابع الزمنية في 4Dev لا يخمّن: "Unix Timestamp" يعني ثواني و"Unix Timestamp (ms)" يعني أجزاء الألف من الثانية، وبجانبهما صيغ بالميكروثانية والنانوثانية. يدعم 33 صيغة في المجموع، منها ISO 8601 وRFC 2822 وSQL DATETIME والتواريخ التسلسلية في Excel.
ISO 8601 عندما يقرأ الناس التاريخ
الطوابع الزمنية مثالية للتخزين والحساب، لكن قراءتها صعبة على الناس. في السجلات وواجهات API والملفات التي يفتحها البشر، تكون صيغة ISO 8601 مثل 2026-09-21T14:30:00Z واضحة لا لبس فيها، وتُرتَّب نصيًا بشكل صحيح، وتذكر المنطقة الزمنية صراحة. والتحويل بين الصيغتين هو بالضبط ما صُمم له محوّل الطوابع الزمنية.