Moment: Mengurai nilai tanpa fallback

Dibuat pada 10 Jul 2015  ·  9Komentar  ·  Sumber: moment/moment

Melewati nilai arbitrer ke moment(value) menghasilkan peringatan penghentian sesuai #1407.

Akan sangat bagus jika ada beberapa cara untuk menggunakan penguraian ini tetapi tanpa kembali ke konstruktor Tanggal. Satu-satunya cara yang saya temukan sejauh ini cukup kikuk:

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

Dan bahkan kemudian ini masih tidak mengurai string ASP.net /Date(1198908717056)/ .

Opsi paling sederhana adalah mengizinkan opsi ketat dalam bentuk dua argumen: moment(value, true) .

Terima kasih.

Enhancement

Komentar yang paling membantu

@SystemParadox jika ini membantu, saya memiliki masalah serupa dengan Anda dan akhirnya saya membuat fungsi pembungkus seperti ini:

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);

Mereka bekerja dengan mengganti createFromInputFallback secara singkat dan kemudian memulihkannya sebelum mereka kembali untuk menghindari mempengaruhi kode lain. Kode apa pun yang siap Anda migrasikan dapat menggunakan momentStrict dan momentStrict.utc sebagai ganti moment dan moment.utc dan sisanya dapat tetap seperti itu.

Semua 9 komentar

Hanya untuk memperjelas, Anda meminta cara untuk menonaktifkan mundur daripada menunjukkan peringatan - tanpa menggunakan mode ketat, bukan?

Ya, saya ingin secara otomatis mem-parsing semua hal yang didukung moment() , tetapi jika semuanya gagal, alih-alih mencetak peringatan dan menggunakan konstruktor Date , saya ingin itu menghasilkan tanggal yang tidak valid.

Saya ingin ikut serta terlebih dahulu ke perilaku versi moment , di mana fallback konstruktor Date sudah usang akan dihapus seluruhnya.

Saya tidak yakin persis apa yang Anda maksud dengan mode ketat. Maksud Anda ketika melewati format persis seperti moment(value, 'YYYY-MM-DD') ? Jika demikian, ini tidak membantu karena 1. sangat bertele-tele dan 2. masih tidak menyertakan semua format yang dapat diuraikan oleh moment(value) sebelum beralih ke konstruktor Date .

Mode ketat diaktifkan dengan melewatkan true sebagai parameter terakhir. Ada di dokumen. Pada dasarnya, ini berarti bahwa string harus sesuai dengan format _exactly_.

Karena format yang didukung langsung oleh moment(String) tercantum dalam dokumen, saya pikir dapat diterima untuk menganggap ini sama dengan mode ketat. Dengan kata lain, menambahkan moment(String, Boolean) .

Ya itu akan luar biasa. Terima kasih.

@SystemParadox ya, apa yang Anda inginkan ADALAH didukung. Anda baru saja menimpa moment.createFromInputFallback(config) :

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

Saya setuju itu tidak sepele, tetapi mungkin ;-)

Itu membantu, tetapi mengubah pengaturan secara global.

Bagaimana jika saya ingin memigrasikan basis kode satu per satu secara bertahap?

Mengapa kita tidak bisa menambahkan dukungan untuk moment(String, true) ?

Pembukaan kembali, sementara ada solusinya, memiliki ini di API publik akan membantu berbagai kasus penggunaan. Pertimbangkan juga #2535, meminta validasi hanya seputar format bawaan.

Yang dibutuhkan adalah konstanta moment.JS_DATE, artinya cukup berikan input ke new Date , periksa https://github.com/moment/moment/issues/1686. Menerima permintaan tarik.

@SystemParadox jika ini membantu, saya memiliki masalah serupa dengan Anda dan akhirnya saya membuat fungsi pembungkus seperti ini:

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);

Mereka bekerja dengan mengganti createFromInputFallback secara singkat dan kemudian memulihkannya sebelum mereka kembali untuk menghindari mempengaruhi kode lain. Kode apa pun yang siap Anda migrasikan dapat menggunakan momentStrict dan momentStrict.utc sebagai ganti moment dan moment.utc dan sisanya dapat tetap seperti itu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

benhathaway picture benhathaway  ·  3Komentar

nikocraft picture nikocraft  ·  3Komentar

dogukankotan picture dogukankotan  ·  3Komentar

BCup picture BCup  ·  3Komentar

danieljsinclair picture danieljsinclair  ·  3Komentar