Moment: ابحث عن مؤشر Meridiem عند مطابقة تنسيق iso

تم إنشاؤها على ٢٣ فبراير ٢٠١٦  ·  15تعليقات  ·  مصدر: moment/moment

كما هو موضح في # 2983 ، فإن استخدام تنسيق التاريخ "2016-02-23 11:31:23 مساءً" سيتطابق مع تنسيق ISO ، على الرغم من أنه ليس كذلك. يؤدي هذا إلى تحليل تاريخ خاطئ:

moment('2016-02-23 11:31:23 PM').format() = "2016-02-23T11:31:23-06:00"

هذا لأن 2016-02-23 11:31:23 من الناحية الفنية هي تنسيق ISO.
نحتاج إلى تغيير الملف from-string للتحقق من وجود مؤشر meridiem والقيام بشيء آخر غير مطابقة تنسيق ISO إذا كان موجودًا.

Bug Forgiving parsing

ال 15 كومينتر

أوتش! يبدو أنه قد يعض شخصًا ما بالتأكيد. لا تحذير الإيقاف سواء.

يبدو أن مجرد التأكد من وصول مدقق ISO إلى نهاية السلسلة يكفي ، على سبيل المثال بإضافة $ إلى نهاية extendedIsoRegex و basicIsoRegex .

icambron لا أعتقد أنه يمكننا فعل ذلك. يجتاز الاختبار التالي حاليًا:

    assert.ok(moment('2016-01-01 is my date').isValid(), 'test extra chars after iso date')

يكاد يكون من المؤكد أن هناك شخصًا ما في العالم يفعل ذلك. قم بتغيير regex وفشل هذا الاختبار (جنبًا إلى جنب مع زوجين آخرين لم أقم بمطاردتهما بعد).

همممم، حسنا. سيكون رأيي هو إهمال ذلك وإصلاح هذا الشيء AM / PM عندما نتخلى عن الدعم له. لا أرى سببًا وجيهًا وراء _should_ دعمنا moment('2016-01-01 is my date')

لقد كنت أفكر في هذا قليلاً ، وأتساءل نوعًا ما إذا كانت الإجابة الأقل توغلًا لبعض مشكلات المحلل اللغوي التي نراها - مثل هذه - ستكون في الواقع الافتراضي للمحلل إلى الوضع المتشدد. يبدو أنه في كثير من الأحيان ، يتم حل مشكلات الإعراب (مثل هذه المشكلة) عن طريق التبديل إلى الوضع المتشدد (لأنه كان يجب على المستخدم استخدام الوضع المتشدد في المقام الأول). ربما هذا هو واحد من هؤلاء "مساعدة الناس على الوقوع في حفرة النجاح" الأشياء؟ من شأن ذلك أن يترك الوظائف الحالية ممكنة ، ولكن يدفع المطور إلى أسفل المسار الصحيح.

موافق ، لطالما أردنا القيام بذلك. أعتقد أنه تم إدراجه كعنصر 3.0 محتمل لفترة طويلة. لكن من المؤكد أن وجود توقيع فردي للحج الأوتوماتيكي يكون صارمًا هو خطوة صغيرة نحو ذلك.

لقد بدأت بالفعل في ترميز الوضع المتشدد افتراضيًا اليوم عن طريق إضافة متغير حالة عالمي قابل للتبديل يسمى globalStrict ، والذي قمت بتعديله افتراضيًا إلى true. يمكن بعد ذلك إعادة إعداد "الوضع المتشدد" إلى "خطأ" من خلال الاتصال بـ:

moment.globalStrict(false)

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

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

يمكنني أيضًا ، كما هو مقترح ، مجرد استدعاءات وسيطة واحدة افتراضية للوضع المتشدد. سيؤدي ذلك إلى إزعاج الآلاف من الأشخاص الذين لا يزالون يتراجعون عن إنشاء تاريخ JS.

يعجبني كل ذلك ، باستثناء شيء واحد:

سيؤدي ذلك إلى إزعاج الآلاف من الأشخاص الذين لا يزالون يتراجعون عن إنشاء تاريخ JS.

لكي أكون واضحًا ، لم يكن اقتراحي إنهاء إهمال مُنشئ لا يمكن الرجوع إلى JS. في الواقع ، العكس: في هذه الحالة ، نريد أن نفعل ذلك تمامًا ولكن فحص ISO يستبقنا.

إذن ، هل تقول إنك ستحاول أمر الدولة العالمية ، أم أنك ستتجنبها؟ ربما سأنتهي من اختبارات الوحدة وأجري العلاقات العامة ويمكننا التحدث عنها هناك.

آسف ، لم أكن واضحًا: أنا لست ضد الدولة العالمية على الإطلاق. لا أعتقد أنه يمنعنا من إجراء فحص ISO الخاص بـ moment(string) صارمًا طوال الوقت ، حتى بدون تعيين الحالة.

maggiepint شكرا
وقد ذكرت بشكل صحيح أعلاه أنني "أحد هؤلاء الأشخاص هناك": P أقوم بأشياء مثل
moment("2016-04-06Tnull").isValid()
بكل ثقة أن اللحظة سوف ترفض سلسلة غير صالحة.

إذن ما أسهل طريقة لتشغيل التحليل الصارم افتراضيًا؟ (آسف ، كوني كسول)

Aukhan ، لم نطبق مطلقًا صارمًا عالميًا بسبب مشكلة تتعلق بتحليل الوضع المتشدد والتي كانت بحاجة إلى

لإنجاز ما تفعله ، أعتقد أنك تحتاج فقط إلى تحديد الوضع الثابت والصارم ISO_8601 المضمّن في التعليمات البرمجية الخاصة بك:

moment("2016-04-06Tnull", moment.ISO_8601, true).isValid()
false

maggiepint شكرا مرة أخرى على ردكم ...

هذا اقتراح رائع ولكني لا أرغب في استبدال المئات من هذه التعبيرات حيث لا يتم استخدام ISO_8601 فقط ولكن يتم استخدام تنسيقات مخصصة مختلفة ، لذلك أعتقد أن الخيار الصارم العالمي سيكون من الجيد الحصول عليه.
بدأت أبحث في قاعدة البيانات ، لكن من الواضح أنه لا يمكن فهم هذا العمل الضخم والرائع بين عشية وضحاها.

قد لا أمتلك المهارات المطلوبة ولكن إذا كان بإمكاني المساعدة بأي شكل من الأشكال ، فيرجى إبلاغي بذلك.
شكرا !

Aukhan سأرى ما إذا كان لا يمكنني اختيار عنصر العمل هذا مرة أخرى. تكمن المشكلة في أنه لكي تعمل ، يجب دمج PR # 3078. لهذا السبب تم إسقاط الشيء في المقام الأول.

إغلاق لصالح # 3502

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات