YamlBox

الويب والتشفير · 50دقيقة قراءة

محول الطابع الزمني: وقت العصر دون التخمين

وقت Unix هو عدد الثواني منذ 1970-01-01T00:00:00 UTC - وهو عدد صحيح واحد يفهمه كل نظام وقد أخطأ كل مطور في قراءته مرة واحدة على الأقل. يقوم محول الطابع الزمني بتحويل هذا العدد الصحيح إلى شيء يمكن للإنسان التحقق منه والعودة إليه مرة أخرى، وهو عادة أسرع طريقة للإجابة على السؤال الذي يبدأ به كل تحقيق في السجل: متى حدث هذا بالفعل؟

تم التحديث

ثواني أو ميلي ثانية: الخطأ الذي يستمر في الحدوث

عشرة أرقام هي ثواني؛ ثلاثة عشر ميلي ثانية. أخطأ في فهمه وسيصل التاريخ إلى عام 1970 أو بعد آلاف السنين من الآن - وهو خطأ يمكن التعرف عليه على الفور بمجرد رؤيته، ولهذا السبب بالضبط يستحق الاعتراف به. يُرجع `Date.now()` الخاص بجافا سكريبت المللي ثانية بينما تخزن معظم لغات الخادم وقواعد البيانات الثواني، وبالتالي فإن الحد بين المتصفح وواجهة برمجة التطبيقات هو المكان الذي يحدث فيه الخطأ عادةً.

                1760000000     → 2025-10-09 09:33:20 UTC   (seconds)
1760000000000  → 2025-10-09 09:33:20 UTC   (milliseconds)
              

التوقيت العالمي المنسق هو الحقيقة. التوقيت المحلي هو اختيار العرض

قيمة العصر لا لبس فيها لأنها UTC حسب التعريف. يظهر الالتباس عند عرضه: نفس اللحظة هي وقت ساعة حائط مختلف في كل منطقة زمنية، وتذكرة الدعم التي تقول "لقد حدث ذلك في الساعة 3 مساءً" تكون مفيدة فقط مع منطقة زمنية مرفقة. قم بتخزين ونقل العصر أو ISO 8601 UTC، وتحويله إلى التوقيت المحلي للعرض، وقم دائمًا بتضمين المنطقة في أي شيء يقرأه الإنسان.

حيث تظهر الطوابع الزمنية في العمل الحقيقي

  • خطوط السجل - أسرع طريقة هي تحويل عمود العصر إلى تواريخ قابلة للقراءة قبل أن تقرأ المعنى.
  • الاستجابات API — `created_at`، `expires_at` ورؤوس ذاكرة التخزين المؤقت، كلها أكثر فائدة بمجرد تحويلها.
  • مطالبات JWT — `exp` و`iat` هي ثواني زمنية، وهذا هو السبب في أن التحقق من انتهاء الصلاحية هو عملية طرح واحدة.
  • صفوف قاعدة البيانات - تعتبر مقارنة الحقبة المخزنة بالوقت الحاضر عملية حسابية؛ إن مقارنتها بـ "الثلاثاء الماضي" تحتاج إلى تحويل.

يعد الطابع الزمني بدون منطقة زمنية خطأً في انتظار القارئ. تنتمي التواريخ المطبوعة إلى ISO 8601 مع إزاحة واضحة، مثل 2025-10-09T09:33:20Z.

حدود 2038

تم التوقيع على ثانية 32 بت منذ انتهاء العصر في 19-01-2038. لا يمكن للأنظمة المبنية على هذا التخزين - بما في ذلك أعمدة MySQL الأقدم ومنصات time_t ذات 32 بت - أن تمثل تواريخ لاحقة، ويكون وضع الفشل عبارة عن التفاف إلى 1901 وليس خطأ. إذا كنت تصمم أي شيء يهدف إلى البقاء على قيد الحياة للعقد القادم، فقم بتخزين أعداد صحيحة 64 بت أو نوع تاريخ أصلي الآن؛ الهجرة تصبح أكثر صعوبة في وقت لاحق.

تحويل في كلا الاتجاهين، في المتصفح

يقبل محول الطابع الزمني YamlBox الثواني أو المللي ثانية، ويعرض UTC والتفسيرات المحلية جنبًا إلى جنب مع إخراج ISO 8601، ويذهب في الاتجاه الآخر من تاريخ يعود إلى عصر ما. إنه يعمل بالكامل من جانب العميل، لذلك لا تترك الطوابع الزمنية من سجلات الإنتاج جهازك أبدًا.

محول الطابع الزمني — الأسئلة المتداولة

لماذا يظهر الطابع الزمني الخاص بي تاريخ 1970؟

دائمًا ما يكون هناك عدم تطابق في الوحدة: تم تفسير المللي ثانية على أنها ثوانٍ، أو أن القيمة صفر لأنه لم يتم ملء الحقل مطلقًا. اضرب أو اقسم على 1000 حسب الاقتضاء، فالفرق بين عشرة وثلاثة عشر رقمًا هو التشخيص بأكمله.

ما الفرق بين وقت العصر وISO 8601؟

يصفون نفس اللحظة. Epoch هو عدد صحيح بالثواني بالتوقيت العالمي المنسق (UTC)، وهو صغير الحجم ومثالي للحساب والتخزين؛ ISO 8601 عبارة عن سلسلة قابلة للقراءة مع إزاحة، وهي أفضل للبشر والسجلات وواجهات برمجة التطبيقات التي يجب أن تظل مقروءة.

هل تتضمن الطوابع الزمنية لنظام Unix مناطق زمنية؟

لا — قيمة العصر تكون دائمًا بالتوقيت العالمي المنسق (UTC). فقط عرضه له منطقة زمنية، ولهذا السبب يتطلب التحويل إلى تاريخ محلي معرفة المنطقة التي يتواجد فيها القارئ، ولماذا يمكن أن يختلف مطوران حول نفس الطابع الزمني بينما يكون كلاهما صحيحًا.

الأدوات المذكورة في هذه التدوينة

تصفح القائمة الكاملة للأدوات 19

المزيد من المقالات للقراءة

جميع المشاركات 19 →