Moment: تحليل القيمة بدون رجوع

تم إنشاؤها على ١٠ يوليو ٢٠١٥  ·  9تعليقات  ·  مصدر: moment/moment

يؤدي تمرير قيمة عشوائية إلى moment(value) إلى ظهور تحذير بالإيقاف وفقًا لـ # 1407.

سيكون من الرائع حقًا إذا كانت هناك طريقة ما لاستخدام هذا التحليل ولكن دون الرجوع إلى مُنشئ التاريخ. الطريقة الوحيدة التي وجدتها حتى الآن هي خرقاء إلى حد ما:

if (moment.isDate(value)) {
    return moment(value);
} else {
    return moment(value, moment.ISO_8601);
}

وحتى ذلك الحين لا يزال هذا لا يحلل سلاسل ASP.net /Date(1198908717056)/ .

سيكون أبسط خيار هو السماح بالخيار الصارم في شكل وسيطتين: moment(value, true) .

شكرا.

Enhancement

التعليق الأكثر فائدة

SystemParadox @ في حال كان مفيدًا ، واجهت مشكلة مماثلة

function disableNativeDateFallback(config) {
    config._d = new Date(parseFloat('NaN')); // an invalid date
}
function makeMomentWrapper(momentFn) {
    return function() {
        var prevFallback = moment.createFromInputFallback;
        moment.createFromInputFallback = disableNativeDateFallback;
        var result = momentFn.apply(null, arguments);
        moment.createFromInputFallback = prevFallback;
        return result;
    }
};
var momentStrict = makeMomentWrapper(moment);
momentStrict.utc = makeMomentWrapper(moment.utc);

إنهم يعملون عن طريق استبدال createFromInputFallback لفترة وجيزة ثم استعادته قبل أن يعودوا لتجنب التأثير على التعليمات البرمجية الأخرى. يمكن لأي رمز أنت مستعد لترحيله استخدام momentStrict و momentStrict.utc بدلاً من moment و moment.utc والباقي يمكن أن يظل كما هو.

ال 9 كومينتر

فقط للتوضيح ، أنت تطلب طريقة لتعطيل التراجع بدلاً من إظهار التحذير - دون استخدام الوضع المتشدد ، أليس كذلك؟

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

أريد الاشتراك بشكل استباقي في سلوك إصدار مستقبلي من moment ، حيث ستتم إزالة احتياطي المُنشئ Date المتوقف تمامًا.

لست متأكدًا تمامًا مما تقصده بالوضع المتشدد. هل تقصد عند تمرير التنسيق الدقيق مثل moment(value, 'YYYY-MM-DD') ؟ إذا كان الأمر كذلك ، فهذا لا يساعد لأنه 1. هو مطول بشكل مانع و 2. لا يزال لا يتضمن جميع التنسيقات التي يمكن لـ moment(value) تحليلها قبل أن تلجأ إلى المُنشئ Date .

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

نظرًا لأن التنسيقات المدعومة مباشرةً بواسطة moment(String) مدرجة في المستندات ، أعتقد أنه سيكون من المقبول اعتبار هذا مثل الوضع المتشدد. بمعنى آخر ، إضافة moment(String, Boolean) .

نعم هذا سيكون أمرا رائعا. شكرا.

SystemParadox نعم ، ما تريده مدعوم. لقد تجاوزت للتو moment.createFromInputFallback(config) :

moment.createFromInputFallback = function (config) {
    config._d = new Date(NaN);
}

أوافق على أنه ليس تافهاً ، لكنه ممكن ؛-)

هذا مفيد ، لكنه يغير الإعداد عالميًا.

ماذا لو كنت أرغب في الترحيل التدريجي لقاعدة بيانات مكالمة واحدة في كل مرة؟

لماذا لا يمكننا فقط إضافة دعم لـ moment(String, true) ؟

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

ما هو مطلوب هو اللحظة. JS_DATE ثابت ، وهذا يعني فقط تمرير الإدخال إلى new Date ، تحقق من https://github.com/moment/moment/issues/1686. قبول طلبات السحب.

SystemParadox @ في حال كان مفيدًا ، واجهت مشكلة مماثلة

function disableNativeDateFallback(config) {
    config._d = new Date(parseFloat('NaN')); // an invalid date
}
function makeMomentWrapper(momentFn) {
    return function() {
        var prevFallback = moment.createFromInputFallback;
        moment.createFromInputFallback = disableNativeDateFallback;
        var result = momentFn.apply(null, arguments);
        moment.createFromInputFallback = prevFallback;
        return result;
    }
};
var momentStrict = makeMomentWrapper(moment);
momentStrict.utc = makeMomentWrapper(moment.utc);

إنهم يعملون عن طريق استبدال createFromInputFallback لفترة وجيزة ثم استعادته قبل أن يعودوا لتجنب التأثير على التعليمات البرمجية الأخرى. يمكن لأي رمز أنت مستعد لترحيله استخدام momentStrict و momentStrict.utc بدلاً من moment و moment.utc والباقي يمكن أن يظل كما هو.

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