الطابع الزمني Unix (ويسمى Epoch time) هو عدد الثواني منذ 1970-01-01 00:00:00 UTC. ليس تاريخاً، بل عدّاد.advantages simplicity: لاzones ولا تقويم ولا صيغ. وهذا بالضبط سبب bajtah widespread用它 في الأنظمة، وسبب الأخطاء حين تُعامل كأنه تاريخ.
الوحدات: مصدر الخطأ الأول
الطابع يُقاس بالثواني دائماً. لكن تطبيقات كثيرة تستخدم المللي ثانية، والخلط بينهما يُنتج تواريخ في الماضي أو المستقبل البعيد:
| القيمة | الوحدة | النتيجة عند العرض |
|---|---|---|
| 1700000000 | ثانية | 2023-11-14 |
| 1700000000000 | مللي ثانية | year 55,000+ |
| 1700000000000000 | ميكرو ثانية | خارج نطاق العرض |
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 صفر، أما مدينتك فتعطي وقتاً محلياً مختلفاً:
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-بت)، لكنها تظل موجودة في الأنظمة القديمة الموروثة:
CREATE TABLE events (
created_at TIMESTAMP -- آمن، صار 64-بت منذ MySQL 5.6
-- لا تستخدم INT للtimestamps
);القراءة من نص: أي صيغة
أحياناً يكون لديك نص وليس رقماً. صيغة ISO 8601 هي المعيار وحلّ كل مشكلات المنطقة الزمنية لأنها تحملها داخلها:
"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 منطقة.