الطابع الزمني Unix (ويسمى Epoch time) هو عدد الثواني منذ 1970-01-01 00:00:00 UTC. ليس تاريخاً، بل عدّاد.advantages simplicity: لاzones ولا تقويم ولا صيغ. وهذا بالضبط سبب bajtah widespread用它 في الأنظمة، وسبب الأخطاء حين تُعامل كأنه تاريخ.

الوحدات: مصدر الخطأ الأول

الطابع يُقاس بالثواني دائماً. لكن تطبيقات كثيرة تستخدم المللي ثانية، والخلط بينهما يُنتج تواريخ في الماضي أو المستقبل البعيد:

القيمةالوحدةالنتيجة عند العرض
1700000000ثانية2023-11-14
1700000000000مللي ثانيةyear 55,000+
1700000000000000ميكرو ثانيةخارج نطاق العرض
تحويل صحيح في المتصفحjavascript
const ts = 1700000000;                    // ثوانٍ
new Date(ts * 1000).toISOString();
// → "2023-11-14T22:13:20.000Z"

const ms = 1700000000000;                  // مللي ثانية
new Date(ms).toISOString();
// → "2023-11-14T22:13:20.000Z"

المنطقة الزمنية: مصدر الخطأ الثاني

الطابع الزمني نفسه لا منطقة زمنية له: 1700000000 يعني اللحظة نفسها في كل مكان. المنطقة تظهر عند العرض. UTC يعني أ-offset صفر، أما مدينتك فتعطي وقتاً محلياً مختلفاً:

العرض حسب المنطقةjavascript
const d = new Date(1700000000 * 1000);

d.toISOString();                        // UTC دائماً: 2023-11-14T22:13:20Z
d.toLocaleString("ar-EG", {
  timeZone: "Africa/Cairo"
});                                      // التوقيت المحلي
// 2023/11/15 12:13:20 ص

// المنطقة الزمنية ليست خاصية من Date مباشرة، بل خيار في العرض
new Date().getTimezoneOffset();         // بالدقائق، يختلف حسب جهازك

لماذا 2038 تReturning Instance

كانت الأنظمة التي تخزّن الوقت كعدد صحيح 32-بت مقيّدة بحد أقصى: 2,147,483,647 ثانية، أي 2038-01-19. بعد هذا التاريخ، القيمة تتجاوز الحد وتتغيّر إلى سالب. المشكلة لم تعد تهدد الأنظمة الجديدة (كل شيء 64-بت)، لكنها تظل موجودة في الأنظمة القديمة الموروثة:

مثال MySQLsql
CREATE TABLE events (
  created_at TIMESTAMP       -- آمن، صار 64-بت منذ MySQL 5.6
  -- لا تستخدم INT للtimestamps
);

القراءة من نص: أي صيغة

أحياناً يكون لديك نص وليس رقماً. صيغة ISO 8601 هي المعيار وحلّ كل مشكلات المنطقة الزمنية لأنها تحملها داخلها:

قراءة نصjavascript
"2026-09-29"            → UTC midnight (بلا منطقة)
"2026-09-29T10:30:00Z"   → UTC صريح
"2026-09-29T10:30:00+03:00" → منطقة صريحة
"2026-09-29 10:30:00"    → لا Franklin — يعتمد على المتصفح!

متى تستعمل Timestamp ومتى لا

  • استعمله في قاعدة البيانات: مقارنة، فرز، حساب فرق بين حدثين — كلها أسهل بكثير بالأرقام.
  • استعمله في الـ API: رقم واحد صغير وسريع النقل.
  • لا تستعمله لعرض التاريخ فقط:Store النص ISO ليقرأه الإنسان مباشرة.
  • لا تعتمد عليه لحساب التقويم業務ي (أسبوع، ربع سنة) دون Explicit منطقة.