Pembaruan 2015
Ini adalah pertanyaan lama tetapi pertanyaan baru lainnya seperti:
ditutup sebagai duplikat dari yang satu ini, jadi menurut saya penting untuk menambahkan beberapa info baru di sini. Saya menulisnya karena saya takut berpikir bahwa orang benar-benar menyalin dan menempelkan beberapa kode yang diposting di sini dan menggunakannya dalam produksi.
Sebagian besar jawaban di sini baik menggunakan beberapa kalimat biasa kompleks yang cocok format hanya beberapa yang sangat spesifik dan benar-benar melakukannya dengan benar (seperti pencocokan 32 Januari sementara tidak cocok tanggal ISO yang sebenarnya seperti yang diiklankan - lihat demo ) atau mereka mencoba untuk lulus apa-apa untuk Date
konstruktor dan berharap yang terbaik.
Menggunakan Momen
Seperti yang saya jelaskan dalam jawaban ini, saat ini ada perpustakaan yang tersedia untuk itu:
Moment.js
Ini adalah pustaka untuk mengurai, memvalidasi, memanipulasi, dan menampilkan tanggal dalam JavaScript, yang memiliki API yang jauh lebih kaya daripada fungsi penanganan tanggal JavaScript standar.
Ini adalah 12kB diperkecil / di-gzip dan berfungsi di Node.js dan tempat lain:
bower install moment --save # bower
npm install moment --save # npm
Install-Package Moment.js # NuGet
spm install moment --save # spm
meteor add momentjs:moment # meteor
Dengan menggunakan Momen, Anda bisa sangat spesifik tentang memeriksa tanggal yang valid. Terkadang sangat penting untuk menambahkan beberapa petunjuk tentang format yang Anda harapkan. Misalnya, tanggal seperti 06/22/2015 tampak seperti tanggal yang valid, kecuali jika Anda menggunakan format DD / MM / YYYY dalam hal ini tanggal ini harus ditolak karena tidak valid. Ada beberapa cara untuk memberi tahu Momen format apa yang Anda harapkan, misalnya:
moment("06/22/2015", "MM/DD/YYYY", true).isValid();
moment("06/22/2015", "DD/MM/YYYY", true).isValid();
The true
Argumen ada begitu Moment tidak akan mencoba untuk mengurai input jika tidak persis sesuai dengan salah satu format yang disediakan (itu harus menjadi perilaku default menurut saya).
Anda dapat menggunakan format yang disediakan secara internal:
moment("2015-06-22T13:17:21+0000", moment.ISO_8601, true).isValid();
Dan Anda dapat menggunakan berbagai format sebagai array:
var formats = [
moment.ISO_8601,
"MM/DD/YYYY :) HH*mm*ss"
];
moment("2015-06-22T13:17:21+0000", formats, true).isValid();
moment("06/22/2015 :) 13*17*21", formats, true).isValid();
moment("06/22/2015 :( 13*17*21", formats, true).isValid();
Lihat: DEMO .
Perpustakaan lainnya
Jika Anda tidak ingin menggunakan Moment.js, ada juga perpustakaan lain:
Pembaruan 2016
Saya membuat modul imoment yang seperti (bagian dari) Momen tetapi tanpa kejutan yang disebabkan oleh mutasi objek yang ada (lihat dokumen untuk info lebih lanjut).
Pembaruan 2018
Hari ini saya merekomendasikan menggunakan Luxon untuk manipulasi tanggal / waktu daripada Momen, yang (tidak seperti Momen) membuat semua objek tidak dapat diubah sehingga tidak ada kejutan buruk terkait dengan mutasi implisit pada tanggal.
Info lebih lanjut
Lihat juga:
Serangkaian artikel oleh Rob Gravelle tentang pustaka pengurai tanggal JavaScript:
Intinya
Tentu saja siapa pun dapat mencoba menemukan kembali roda, menulis ekspresi reguler (tetapi harap benar-benar membaca ISO 8601 dan RFC 3339 sebelum Anda melakukannya) atau memanggil konstruktor buit-in dengan data acak untuk mengurai pesan kesalahan seperti 'Invalid Date'
(Anda yakin pesan ini adalah persis sama di semua platform? Di semua lokal? Di masa mendatang?) atau Anda dapat menggunakan solusi yang telah diuji dan menggunakan waktu Anda untuk memperbaikinya, bukan menciptakannya kembali. Semua perpustakaan yang tercantum di sini adalah sumber terbuka, perangkat lunak gratis.