لماذا الطوابع الزمنية لها حد لـ 2038؟
سؤال
اكتشفت للتو ، عند تشغيل برنامج نصي للتقويم ، أن الطوابع الزمنية في PHP لها حد يصل إلى 2038. ماذا يعني ذلك حقًا؟لماذا هو 2038 بدلاً من 2050 أو 2039؟لماذا حد إذا كانت الطوابع الزمنية تحسب الثواني من تاريخ معين (1970)؟
المحلول
يتم فرض الحد من خلال الأعداد الصحيحة ذات الإشارات المكونة من 4 بايت والتي تستخدمها معظم مكتبات لغة C لتمثيل هذا العدد.الرياضيات السريعة (بافتراض 365 يومًا للسنوات ، غير صحيح تمامًا): Genacodicetagpre
يشير هذا أيضًا إلى حد أدنى يبلغ 1900 تقريبًا.بدأت بعض المكتبات في تقديم عدد 64 بت من الأعداد الزمنية ، لكنها قليلة ومتباعدة في الوقت الحالي.
نصائح أخرى
القيمة القصوى لعدد صحيح 32 بت هي 2،147،483،647.إذا أضفت +1 إلى ذلك ، فستحصل على -2،147،483،647.2،147،483،647 ثانية من 01-01-1970 00:00:00 هو 19 يناير 2038. إذا أضفت ثانية أخرى ، فستحصل على تاريخ في مكان ما في عام 1902.
نظرًا لحد من نوع بيانات INT على جهاز 32 بت
http://php.net/manual/en/function.mktime.php
من php.net: "يعتمد الحد الأقصى للتاريخ المحتمل المقبول بواسطة mktime () و gmmktime () على المنطقة الزمنية للموقع الحالي.
على سبيل المثال ، يحدث تجاوز الطابع الزمني 32 بت في 2038-01-19T03: 14: 08 + 0000Z.ولكن إذا كنت في منطقة زمنية UTC -0500 (مثل EST في أمريكا الشمالية) ، فإن الحد الأقصى للوقت المقبول قبل تجاوز السعة (لإصدارات PHP الأقدم على Windows) هو 2038-01-18T22: 14: 07-0500Z ، بغض النظر عنسواء كنت تمررها إلى mktime () أو gmmktime (). "
أظن أنه يتم تخزينه في عدد ثابت من البتات ، مما يعني حدًا لمدى الحجم الذي يمكن أن يصل إليه الطابع الزمني.يمكننا إجراء بعض العمليات الحسابية لمعرفة ذلك بالضبط.