متوفر أيضًا بلغات أخرى: English · Español · Português · Français
صيغة ISO 8601: محلّل ومدقّق
الصق أي نصّ بصيغة ISO 8601 لترى معناه، وأيّ القواعد تقبله، وماذا يصنع به متصفّحك أنت.
ما هي صيغة ISO 8601؟
ISO 8601 هو المعيار الدولي لكتابة التواريخ والأوقات كتابةً ترتّبها ترتيبًا صحيحًا، وتُقرأ على وجه واحد في كل بلد، ولا تدع أحدًا يحتار أيعني 03/08 آذار أم آب. وأشهر صورها هي التي يقصدها الناس حين يقولون «صيغة ISO 8601»: التاريخ هكذا 2026-08-03، ثم الوقت بعد حرف T، ثم الإزاحة عن توقيت UTC في آخره، فيصير 2026-08-03T12:00:00Z.
والمعيار أوسع كثيرًا من هذه الصورة الواحدة، ومن هنا يبدأ أكثر اللبس. فـ ISO 8601 يعرّف أيضًا تواريخ بلا فواصل، وتواريخ تعطي اليوم من السنة بدل الشهر، وتواريخ ترقّم الأسبوع بدل اليوم، ومددًا، وفتراتٍ بين نقطتين. وكل ذلك ISO 8601. وقليلٌ جدًّا من البرمجيات يقبل ذلك كلّه.
فالمدقّق الذي لا يجيب إلا بـ«صالح» أو «غير صالح» يجيب عن سؤالٍ لا جواب واحد له. أما هذا فيعطي ثلاثة أحكام جنبًا إلى جنب — ISO 8601 و RFC 3339 والصيغة التي تعرّفها الجافاسكربت — لأن النصّ قد يكون سليمًا تمامًا عند أحدها ومرفوضًا عند الآخرَين، ومعرفة أيّها أيّ هي ما ينفع فعلًا.
كيف تستعمل المحلّل
- الصق نصّك. تاريخًا، أو تاريخًا مع وقت، أو مدّةً تبدأ بحرف P، أو فترةً بينها شرطة مائلة. وأزرار الأمثلة تحمّل واحدًا من كل نوع، منها اثنان يرفضهما أكثر المحلّلات.
- اقرأ معناه. التاريخ بعد حلّه، واللحظة بتوقيت UTC وبمنطقتك الزمنية، والإزاحة كما كُتبت، ثم التاريخ نفسه معبَّرًا عنه تاريخًا ترتيبيًّا وتاريخًا أسبوعيًّا لترى صوره الأخرى.
- انظر في الأحكام الثلاثة. تقول كل قواعدَ أتقبل النصّ أم لا، وإن رفضته بيّنت أيّ قاعدة بالضبط خُرقت. وتحتها يجرّب متصفّحك أنت النصّ نفسه.
إن ISO 8601 و RFC 3339 والجافاسكربت ثلاث مجموعات مختلفة
تُستعمل هذه الأسماء الثلاثة كأنها مترادفة، وليست كذلك. وقد قِسنا الثلاثة على النصوص نفسها، فلم يكن أيٌّ منها مجموعةً جزئيةً من الآخر، بل تتقاطع.
تقبل دالة Date.parse في الجافاسكربت «2026» و«2026-08»، وحرفَي t وz صغيرين، ومسافةً في موضع حرف T، وإزاحةً مكتوبة 0200+ بلا نقطتين. وترفض الصورة الأساسية 20260803، والتاريخ الأسبوعي 2026-W31-1، والتاريخ الترتيبي 2026-215، وهذه أغربها: كسرًا مكتوبًا بفاصلة، وهي بعينها الفاصل الذي تذكره قواعد ISO 8601 أولًا. أما المكتبة القياسية في بايثون فتختار العكس تقريبًا: تقبل الترميز الأساسي والتواريخ الأسبوعية والفاصلة، وترفض «2026-08» والحروف الصغيرة والساعة 24. والتاريخ الترتيبي يرفضه الاثنان معًا، وهو ISO 8601 سليم تمامًا.
أما RFC 3339، وهو الملمح المستعمل في بروتوكولات الإنترنت، فأشدّ الثلاثة، وهو قواعد إلزامية لا وصف. يشترط حرف T، ويشترط حضور الإزاحة مكتوبةً كاملةً بصيغة ±HH:MM، ولا يقبل قبل كسر الثانية إلا النقطة. ويسمح كذلك بما لا يقربه الآخران: ثانيةً كبيسة تُكتب 60:. فـ 2016-12-31T23:59:60Z ختمٌ زمنيّ صالح بمعيار RFC 3339 لا تكاد مكتبة تواريخ واحدة تقدر على تمثيله.
والمعيار الذي تستعمله الجافاسكربت صريح في حدود نفسه. فالقسم 21.4.1.32 من ECMA-262 يصف صيغته بأنها «تبسيط لصيغة التاريخ التقويمي الممتدة من ISO 8601»، فالتواريخ الأسبوعية والترتيبية والترميز الأساسي خارجةٌ عنها قصدًا لا سهوًا. وكل ما لا يطابقها متروك — بنصّ المعيار — لـ«اجتهاد كل تطبيق على حدة»، ولهذا تُشغّل الأداة Date.parse في متصفّحك بدل أن تخبرك بما تفعله المتصفّحات.
إن Date.parse لا تتحقّق من صحّة التواريخ
هذا هو الفخّ الجدير بالمعرفة، وليس عيبًا في المتصفّح، بل ينبني على المعيار نفسه. فصيغة الجافاسكربت تعطي اليوم «رقمين عشريين من 01 إلى 31»، دون أي إشارة إلى الشهر. فـ 2026-02-30 نصّ مطابق للصيغة، تقرؤه المتصفّحات ثم تدع اليوم يفيض، فيخرج لك 2 آذار. أما 2026-13-01 فتُرجع NaN، لأن 13 خارج المدى المعلن للشهر.
ونتيجة ذلك أن التحقّق من تاريخ بسؤال «هل تُرجع Date.parse قيمة NaN؟» يقبل الثلاثين من شباط، والحادي والثلاثين من نيسان، والتاسع والعشرين من شباط في سنةٍ لا تحوي ذلك اليوم. وهذا المحلّل يرفضها جميعًا، ولهذا وُضع لها زرّ مثال: الصقه لتخبرك الأداة أن متصفّحك أنت قبِل تاريخًا مستحيلًا، وتريك أيّ تاريخ اخترعه.
وفي الميدان نفسه مفاجأة ثانية، وهي أيضًا منصوص عليها. يقول القسم 21.4.3.2 من ECMA-262 إنه عند غياب الإزاحة تُقرأ صور التاريخ وحده على أنها UTC، وتُقرأ صور التاريخ مع الوقت على أنها توقيت محلي. فـ 2026-08-03 هو منتصف ليل UTC، بينما 2026-08-03T00:00:00 هو منتصف الليل حيث أنت؛ أي إن إضافة وقتٍ إلى تاريخ تزيح اللحظة بمقدار إزاحتك كاملةً في صمت، فيصير النص الواحد لحظاتٍ مختلفةً على أجهزة مختلفة. وتنبّهك الأداة إلى ذلك كلما خلا مُدخلك من إزاحة.
الصور التي لم يرها أكثر البرامج
التاريخ الترتيبي يستبدل باليوم من السنة الشهرَ واليوم: فـ 2026-215 هو اليوم الخامس عشر بعد المئتين من سنة 2026، أي الثالث من آب. والتاريخ الأسبوعي يرقّم الأسبوع: فـ 2026-W31-1 هو اثنين الأسبوع الحادي والثلاثين. ولترقيم الأسابيع قاعدة تفاجئ الناس، وهي أن الأسبوع يتبع السنة التي فيها خميسه، فقد يبدأ أول أسبوع في السنة في كانون الأول. فـ 2026-W01-1 هو التاسع والعشرون من كانون الأول 2025، والأداة تقول ذلك حين تختلف السنتان.
أما الترميز الأساسي فيحذف الفواصل حذفًا، فيعطي 20260803 و20260803T120000Z. وهو الصورة التي تلقاها في أسماء الملفات، وفي تصديرات البيانات القديمة، وفي كتل EXIF داخل الصور الفوتوغرافية، وهو سبب أن يكون العدد المكوّن من ثمانية أرقام في ملف بيانات تاريخًا في أكثر الأحيان.
والمدّة تبدأ بحرف P: فـ P3Y6M4DT12H30M5S هي ثلاث سنوات وستة أشهر وأربعة أيام واثنتا عشرة ساعة وثلاثون دقيقة وخمس ثوانٍ. وتجمع الأداة المدّة بالميلي ثانية، لكن حين تستطيع فقط. فالمدّة التي تستعمل سنواتٍ أو أشهرًا لا طول ثابت لها، لأن طولها يتوقّف على موعد بدايتها، فلا وجود لرقم واحد صادق، والأداة تقول ذلك بدل أن تختار متوسّطًا. والفترة اثنتان من هذه يفصل بينهما شرطة مائلة، على إحدى ثلاث صور: لحظتان، أو لحظة ومدّة، أو مدّة ولحظة.
ما لن تدّعي هذه الصفحة معرفته
معيار ISO 8601 تبيعه المنظمة الدولية للمعايير وليس متاحًا للقراءة مجانًا. والقواعد التي تفحص هذه الأداة مقابلها هي صيغة ABNF المجمّعة المنشورة في الملحق A من RFC 3339، وهي أقرب ما يكون إلى نسخة حرّة يجوز الاستشهاد بها — وهي تنفي عن نفسها الحجّية بشيء من التفصيل. فهي موسومة بأنها إعلامية، وبُنيت على طبعة 1988، وتفتتح بالقول إن ISO 8601 لا يعرّف أي قواعد صورية أصلًا.
ثم تُعدّد أربعة مواضع لا يتّضح فيها المعيار: أيجوز خلط الترميز الأساسي والممتد في نصّ واحد، وهل الساعة 24 مقبولة فقط حين تكون الدقائق والثواني أصفارًا، وهل يجوز إسقاط حرف T يومًا، وقاعدةٌ في الكسر العشري يتناقض فيها القسم 5.3.1.3 والملحق B.2 من المعيار تناقضًا صريحًا. وقد اضطرّ واضعو الـ RFC إلى ترجيح أيّهما الخطأ. هذه حال معيارٍ يستشهد به الجميع كأنه حسم كل شيء.
والساعة 24 خير مثال على قلّة الاتفاق. فـ ECMA-262 يجيزها ويضيف ملاحظة بأن هذا متّسق مع ISO 8601 «وإن كان ذلك المعيار يقصرها على وصف الفترات الزمنية ولا يجيزها في تمثيل نقطة زمنية مفردة». أما ملحق RFC 3339 فيقول على العكس إن ISO 8601 «غير واضح» في المسألة، ويفترض أن الساعة 24 جائزة في كل موضع. وثيقتان حرّتان تصفان معيارًا مدفوعًا واحدًا، وتختلفان فيما يقوله.
وأخيرًا المدى. تغطّي تواريخ الجافاسكربت نحو 273,790 سنة على كل جانب من 1970، وآخر لحظة يمكن حفظها هي الثالث عشر من أيلول سنة 275760. وما تجاوز ذلك يُرفض هنا بدل أن يُعرض خطأً، لأن المعيار يوجب أن تُرجع تلك النصوص قيمة NaN دون لجوء إلى التخمين.
لماذا هي مجانية؟
التحليل يجري في متصفّحك. فلا يُرفع شيء ممّا تلصقه ولا يُسجَّل ولا يُخزَّن — وإغلاق التبويب هو كل الحذف اللازم. وهذا هنا أهمّ من المعتاد، لأن الأختام الزمنية التي يحتاج المرء إلى فكّها تخرج غالبًا من سجلّات التشغيل وتقارير الأخطاء.
بلا حساب، وبلا تسجيل، وبلا حدٍّ لعدد النصوص التي تفحصها، وبلا علامة مائية على أي شيء تنسخه.