Chrono Mock
اللغةالعربية

أي تاريخ ينبغي أن تختبر؟

نصف اختبار التواريخ هو تحريك الساعة، ونصفه الآخر أن تعرف إلى أين تحرّكها. فالحاسبة المتاحة على الإنترنت تخبرك أي يوم يأتي بعد تسعين يومًا من اليوم، لكنها لا تخبرك أن الجواب عطلة مصرفية، أو أنه آخر يوم في الربع.

حاسبة Chrono Mock. قائمة سيناريوهات قابلة للبحث مع شروحاتها على جانب، ومنشئ التاريخ في الوسط، وعمود النتائج الذي يسرد كل صيغة وبجانب كل منها زر نسخ ثم Use this date تحتها. وتحت المنشئ، التاريخ الملصق 04/08/2008 مُعلَّم على أنه ملتبس مع عرض القراءتين الأمريكية والبولندية.
تحت المنشئ الاتجاه المعاكس: لصق 04/08/2008، فتظهر القراءتان بدل تخمين واحدة.

أيام العمل، مع العطلات الحقيقية

«بعد عشرة أيام عمل» ليست عملية حسابية - فهي تعتمد على تقويم أي بلد تحسب به. تاريخ البدء نفسه، والأيام العشرة نفسها، وجوابان مختلفان:

$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar us-banking
  result:  2027-09-16T00:00:00

$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar pl
  result:  2027-09-15T00:00:00

فارق يوم واحد، وستخبرك الحاسبة بالسبب إن سألتها عن التاريخ الواقع بينهما:

$ chrono calc --base 2027-09-06T00:00:00 --calendar us-banking
  metadata:
    weekday       Monday
    business day  no  (us-banking)
    holiday       Labor Day
  what this date lands on:
    public holiday
    (weekend and holiday marks follow the us-banking calendar)

تُوفَّر الولايات المتحدة وبولندا كتقويمين مرجعيين، اختيرتا لأنهما معًا تُجريان كل أنواع القواعد الموجودة: التواريخ الثابتة، واليوم رقم n من الأسبوع في الشهر، والتواريخ المحسوبة من عيد الفصح، والقاعدة الأمريكية التي تُحتسب فيها العطلة الواقعة يوم السبت في الجمعة السابقة. وإضافة بلد ملف بيانات لا تعديل في الشيفرة.

كل الصيغ دفعة واحدة

يريد التطبيق قيد الاختبار التاريخ بالصيغة التي يتوقعها. وبدل أن تحوّلها بنفسك تطبعها الحاسبة كلها - مع قناع مخصّص لما لا يوافق أي صيغة قياسية.

$ chrono calc --preset year-2038 --zone +00:00
Chrono Mock - date calculator
  preset:   year-2038 - 2038 boundary
  explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)?
  result:  2038-01-19T03:14:07
  formats:
    ISO date      2038-01-19
    ISO datetime  2038-01-19T03:14:07+00:00
    US            01/19/2038
    PL            19.01.2038
    epoch (s)     2147483647
    epoch (ms)    2147483647000
    FILETIME      137919572470000000
    RFC 1123      Tue, 19 Jan 2038 03:14:07 GMT
  ...
  what this date lands on:
    at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)

قيمة الحقبة هذه ليست مصادفة - فالعدد 2147483647 هو بالضبط أكبر عدد يتّسع له عدد صحيح بإشارة بطول 32 بت، وهذا هو السبب الكامل في أهمية ذلك التاريخ.

قراءة التاريخ بالعكس

الاتجاه الآخر مفيد بالقدر نفسه: الصق تاريخًا من سجلّ وتعرّف إلى ما هو. وعندما تكون الصيغة ملتبسة - و04/08 ملتبس في نصف العالم - تُعرض القراءتان معًا بدل أن تُخمَّن واحدة، لأن التخمين هو مصدر بلاغ العطل الأصلي.

$ chrono calc --analyze 04/08/2027
Chrono Mock - date analysis
  input:   04/08/2027  (ambiguous - month/day order differs by locale)
  US MM/DD/YYYY:  2027-04-08  (Thursday)
  PL DD/MM/YYYY:  2027-08-04  (Wednesday)

بينهما أربعة أشهر، وفي يومين مختلفين من الأسبوع. وتاريخ ISO لا لبس فيه ويُقرأ على أنه كذلك، وما ليس تاريخًا أصلًا يُرفض ولا يُخمَّن.

مبنيّ من خطوات، لا من جملة

اللحظة نقطة بداية وخطوات، وتُعرض النتيجة الوسيطة بعد كل خطوة، فيريك التعبير الذي يعطي جوابًا مفاجئًا أين انعطف. خمسة أنواع من الخطوات: الإزاحة بوحدة، وضبط وقت اليوم، والقفز إلى حدّ فترة، والانتقال إلى أقرب يوم عمل، وإعادة التعبير بمنطقة زمنية أخرى.

# آخر ثانية قبل أن تنقلب السنة
chrono calc --base today --snap eoy

# بعد تسعين يوم عمل، بتقويم المصارف الأمريكية
chrono calc --base today --shift +90bd --calendar us-banking

# ثماني عشرة سنة ويوم إلى الوراء، لفحص العمر
chrono calc --base today --shift -18y --shift -1d

أي تاريخ محسوب يذهب مباشرة إلى جلسة استبدال، ويُخرج --json النتيجة نفسها بصيغة الآلة. التواريخ الجديرة بالاختبار ←

جرّبه