كيف أحصل على الفرق (بالثواني) بين تاريخين دون استخدام: strtotime ، إطار Zend أو حزمة الكمثرى؟

StackOverflow https://stackoverflow.com/questions/2068033

  •  20-09-2019
  •  | 
  •  

سؤال

كما ينص العنوان ، أرغب في الحصول على الفرق (بالثواني) بين 2 (على وجه التحديد بين الآن وتاريخ في الماضي) دون استخدام: strtotime ، إطار Zend أو حزمة الكمثرى.

لا أريد الدخول في تفاصيل السبب ، لكن جوهره هو أنني أعمل مع تواريخ قديمة جدًا (وأنا أقصد قديمًا ، أنا أتحدث قبل 0 إعلان).

من المفضل أن تكون النتيجة التي تم إرجاعها دقيقة للغاية وصولاً إلى الثاني من الطابع الزمني النصفي المعطى. يجب أن يكون التنسيق المطلوب استدعاء الوظيفة مشابهًا لـ:

$bar = foo("YYYY-MM-DD HH:MM:SS", "AD"); // Where AD is Anno Domini 
$baz = foo("YYYY-MM-DD HH:MM:SS", "BC"); // Where BC is Before Christ

أول شخص يقدم عملًا يميز:

  • قابلية قراءة عالية
  • لا السحر (مشغلي الثلاثية ، وما إلى ذلك)

سوف يكون إجابتهم مقصورة وقبولها. سيتم الفضل في اسمهم في رأس الملف المصدر الذي يستخدم التعليمات البرمجية الخاصة بهم.

تحرير (إعادة: الشهرة):

قال أحدهم إن وجود اسم يُنسب إليه في الرأس يبدو سيئًا ويمكن تحريره. أنا أتحدث عن رأس الملف المصدر الذي يستخدم الوظيفة التي أريدها. هذا ليس عن "الشهرة". يجب منح الائتمان عندما يكون الائتمان مستحقًا وليس لدي حاجة إلى الكذب بشأن من قام بتأليف العمل.

تحرير (رد: الدقة):

لا يوجد سبب آخر غير أنني أريد الاحتفاظ بـ "خطاب الرسالة" بأفضل ما أنا قادر.

تحرير (إعادة: السحر):

السحر هو أشياء مختلفة لأشخاص مختلفين. فيما يتعلق بالمشغل الثلاثية ، يرجى احترام رأيي وأنا أحترم لك. شكرًا لك.

تحرير (إعادة: التواريخ القديمة ودقة ثانية واحدة):

كطالب في التاريخ ، من المنطقي بالنسبة لي. الرغبة في "دقة ثانية واحدة" ليست مطلقة. الكمال ، في حين أنه يمكن تحقيقه ، غير مطلوب.

هل كانت مفيدة؟

المحلول

أقترح تقسيم كل بيانات إلى أجزاء (سنة ، شهر ، تاريخ ، ساعات ، دقائق ، ثوان). بعد ذلك ، مع كل جزء ، قم بعمل مبلغ أساسي أقل من ناقص أقل (تذكر أن تاريخ BC هو رقم سالب فعليًا).

لن تحصل عليه أبدًا بشكل صحيح. سيتعين عليك التفكير في سنوات قفزة ، وما إذا كان عام قرن هو سنة قفزة ، والتحول بين تواريخ غريغوري/جوليان وما إلى ذلك.

بالإضافة إلى أنني أحب أن أعرف منطقك عن القيود ومتطلبات الدقة العالية!

نصائح أخرى

للاطلاع على كل هذه الأمور ، انظر الحسابات التقويمية (Google لذلك).

أوه ، ولم يكن هناك سنة 0 م ، انتقل التقويم من 1BC إلى 1AD ، أو بالأحرى ، نحن الغربيون الحديثون نحدد التقويم بهذه الطريقة ، في ذلك الوقت كان معظم العالم يستخدم أنظمة أخرى.

أو إجراء مكالمات إلى الآلات الحاسبة عبر الإنترنت مثل هذا وإنقاذ نفسك الكثير من الوقت.

بعض اللغات وقواعد البيانات تفعل تاريخ الحساب ، والبعض الآخر لا. إذا قمت بتخزين تواريخك في قاعدة بيانات ، جرب Postgres:

pg=> SELECT now() - 'January 8, 52 BC'::DATE;
-----------------------------
 754835 days 20:27:31.223035

إذا لم تستخدم DB ، فسيصبح الأمر أكثر إشكالية. حسابي تاريخ PHP هو ... حسنًا ، أفضل عدم التحدث عن ذلك. Python's جيدة جدًا ، لكنه يبدأ في السنة 1BC.

قد تضطر إلى لف الخاص بك ...

لماذا لا تطرح الطابع الزمني؟

mktime(16,59,0,8,7,2001) - mktime(16,59,0,8,7,2000) = ثواني بينهما

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top