محوّل Epoch / Unix Timestamp
يحوّل طوابع Unix epoch الزمنية إلى تواريخ مقروءة — والتواريخ مرة أخرى إلى epoch. يُكتشَف وضع الثواني والميلي ثانية تلقائيًا. تتم جميع التحويلات في متصفحك.
آخر تحديث:
Epoch ← التاريخ
أدخل طابعًا زمنيًا رقميًا صالحًا.
- UTC
- —
- الوقت المحلي
- —
- ISO 8601
- —
- نسبي
- —
- يوم الأسبوع
- —
- الوحدة المكتشَفة
- —
التاريخ ← Epoch
- Epoch (ثوانٍ)
- —
- Epoch (ميلي ثانية)
- —
متى تحتاج هذا المحوّل
عند بناء تسلسل زمني لحادث
السجلات وقواعد البيانات وواجهات البرمجة تكتب اللحظة نفسها بصيغ مختلفة: ثوانٍ أو ميلي ثانية أو نص ISO. لا جواب موثوقًا عن سؤال «أيّهما وقع أولًا؟» قبل توحيد الصيغ كلها.
عند فحص صلاحية توكن أو جلسة
حقل exp في JWT وقيمة انتهاء الكوكي ومدة صلاحية الكاش كلها أرقام epoch. تحويل الرقم إلى تاريخ مقروء يجيب فورًا: متى تنتهي هذه الجلسة فعلًا؟
عند مطابقة سجلات خوادم متفرقة
خادم في فرانكفورت وآخر في سنغافورة يسجلان بالتوقيت المحلي لكل منهما. توحيد الطوابع إلى UTC هو الخطوة الأولى في أي تحقيق عابر للخوادم، والمثال أدناه يوضح السبب.
مثال محسوب: قراءة الطابع 1750000000
وصلك سجل فيه timestamp = 1750000000 وتريد معرفة اللحظة التي يشير إليها. الخطوات:
- الرقم من عشر خانات، وعدد الخانات يكشف الوحدة: هذه ثوانٍ لا ميلي ثانية.
- بالتوقيت العالمي: 15 يونيو 2025، الساعة 15:06:40.
- بتوقيت مكة (+3): الساعة 18:06:40 من اليوم نفسه.
- الرقم نفسه بالميلي ثانية يصبح 1750000000000، بثلاث عشرة خانة.
- الفارق بين التوقيتين ثابت طوال السنة، لأن السعودية لا تطبّق التوقيت الصيفي.
الطابع الزمني رقم عالمي واحد، والمنطقة الزمنية مجرد طبقة عرض. من يخزّن التاريخ بعد تحويله إلى توقيت محلي يخسر هذه الميزة: سيلتبس عليه السجل مع أول خادم يعمل بمنطقة مختلفة. خزّن بالـUTC دائمًا، وحوّل عند العرض فقط.
أربعة أخطاء متكررة
تخزين الطابع في عمود نصّي
ما دام الرقم نصًّا فترتيبه معجميّ لا عدديّ، فيأتي «9» بعد «10». الجداول التي بُنيت هكذا تعمل بلا شكوى حتى أول استعلام يرتّب بالتاريخ، ثم يظهر الخلل في تقرير لا في رسالة خطأ. مكان الطابع عمود عددي صحيح 64 بت.
اشتقاق التاريخ الهجري من الطابع مباشرة
الطابع يعطيك لحظة ميلادية دقيقة، أما تحويلها إلى هجري فيعتمد على التقويم المُعتمد: تقويم أمّ القرى يختلف عن الحساب الجدولي بيوم أو يومين في مواضع كثيرة. ثبّت التقويم والمنطقة الزمنية معًا في موضع واحد من النظام، وإلا اختلف تاريخ الفاتورة الواحدة بين شاشتين.
مقارنة طوابع من ساعات غير متزامنة
طابعان من خادمين لا يتبادلان NTP قد يختلفان ثواني كاملة، فيظهر الطلب وكأنه وصل قبل إرساله. قبل الاستنتاج من ترتيب الأحداث، تأكد أن الساعات نفسها متزامنة.
طرح تواريخ منسّقة بدل طرح الطوابع
من يحسب المدة بين لحظتين على نصّهما المعروض يدخل في أطوال الأشهر وسنوات الكبس وحدود المناطق. اطرح الطابعين عددًا ثم نسّق الناتج للعرض؛ فالفرق بين رقمين لا يخطئ، والفرق بين نصّين يخطئ كثيرًا.
أدوات تُستعمل إلى جانبها
- محلّل تعبير Cron حلّل تعبير cron حقلًا بحقل وشاهد أوقات التشغيل التالية. لـ Kubernetes CronJob والمهام المجدولة.
- محلّل JWT حلّل قسمَي الترويسة والحمولة في JSON Web Token، وشاهد المطالبات القياسية ومدة الصلاحية. لا يغادر الـ token المتصفح.
- مولّد Hash (SHA) احسب ملخصات SHA-1 وSHA-256 وSHA-384 وSHA-512 للنص فورًا. عبر Web Crypto API، في المتصفح.
- مُرمّز/مُفكّك HTML / Entity رمّز النص إلى كيانات HTML أو فُكّ ترميزه. اهرب المحارف الخاصة لمنع XSS؛ في المتصفح، دون تسجيل.
- عارض HTML الصق شيفرة HTML وعايِنها حيًّا فورًا. في إطار معزول وآمن (sandbox)؛ والـ scripts معطّلة للأمان.
الأسئلة الشائعة
ما هو وقت Unix epoch؟
وقت Unix epoch (وقت POSIX) هو عدد الثواني المنقضية منذ 1 يناير 1970 الساعة 00:00:00 UTC. ولأنه رقم واحد مستقل عن المناطق الزمنية، فهو معيار الطابع الزمني في السجلّات وواجهات API والأنظمة الموزّعة.
كيف أعرف إن كان بالثواني أم بالميلي ثانية؟
epoch بالثواني يتكوّن اليوم من 10 أرقام؛ وبالميلي ثانية من 13 رقمًا. تكتشف هذه الأداة الوحدة تلقائيًا من عدد الأرقام. أدوات Unix ومعظم قواعد البيانات تستخدم الثواني، بينما Date.now() في JavaScript يستخدم الميلي ثانية.
لماذا تكون طوابع epoch بتوقيت UTC؟
يَعُدّ epoch الوقت المنقضي منذ لحظة ثابتة (1970 UTC)؛ ولا يحمل منطقة زمنية. تحوّله إلى الوقت المحلي عند العرض، لكن تخزينه دائمًا كـ epoch (UTC) يمنع الأخطاء الناتجة عن المناطق الزمنية والتوقيت الصيفي.
ما هي مشكلة عام 2038؟
الأنظمة التي تخزّن epoch في عدد صحيح موقَّع 32 بت ستتجاوز السعة في 19 يناير 2038 الساعة 03:14:07 UTC. تستخدم الأنظمة الحديثة عددًا صحيحًا 64 بت يوفّر مدى غير محدود عمليًا. وفي .NET لا يعاني DateTimeOffset من هذه المشكلة.
كيف أُنتج epoch في .NET؟
DateTimeOffset.UtcNow.ToUnixTimeSeconds() يعطي epoch بالثواني، وToUnixTimeMilliseconds() يعطيه بالميلي ثانية. وللتحويل العكسي تُستخدَم DateTimeOffset.FromUnixTimeSeconds(value).