2015 Güncellemesi
Bu eski bir soru ama diğer yeni sorular:
Bu bir kopya olarak kapalı olsun, bu yüzden burada bazı taze bilgi eklemek önemli olduğunu düşünüyorum. Bunu yazıyorum çünkü insanların burada yayınlanan kodların bazılarını kopyalayıp yapıştırarak üretimde kullandığını düşünmekten korktum.
Buradaki yanıtların çoğu ya sadece çok belirli biçimlerle eşleşen bazı karmaşık düzenli ifadeler kullanır ve bunu yanlış yapar (gerçek ISO tarihini reklamı yapılanla eşleştirmeden 32 Ocak'ı eşleştirmek gibi - demoya bakın ) ya da herhangi bir şeyi kurucuya aktarmaya çalışırlar Date
ve en iyisini diliyorum.
Anı Kullanma
Bu cevapta açıkladığım gibi şu anda bunun için bir kütüphane var:
Moment.js
Standart JavaScript tarih işleme işlevlerinden çok daha zengin bir API'ye sahip olan JavaScript'teki tarihleri ayrıştırmak, doğrulamak, değiştirmek ve görüntülemek için bir kitaplıktır.
12kB küçültülmüş / sıkıştırılmış ve Node.js ve diğer yerlerde çalışır:
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
Moment'i kullanarak geçerli tarihleri kontrol etme konusunda çok spesifik olabilirsiniz. Bazen beklediğiniz format hakkında bazı ipuçları eklemek çok önemlidir. Örneğin, DD / AA / YYYY biçimini kullanmadığınız sürece 06/22/2015 gibi bir tarih geçerli bir tarihe benzemektedir; bu durumda bu tarih geçersiz olarak reddedilmelidir. Moment'e hangi formatı beklediğinizi söylemenin birkaç yolu vardır, örneğin:
moment("06/22/2015", "MM/DD/YYYY", true).isValid(); // true
moment("06/22/2015", "DD/MM/YYYY", true).isValid(); // false
true
Argüman Moment o değilse giriş ayrıştırmak denemez yüzden orada tam olarak sunulan biçimlerden birinde uygun (Bence varsayılan bir davranış olmalıdır).
Dahili olarak sağlanan bir biçimi kullanabilirsiniz:
moment("2015-06-22T13:17:21+0000", moment.ISO_8601, true).isValid(); // true
Ve bir dizi olarak birden çok biçimi kullanabilirsiniz:
var formats = [
moment.ISO_8601,
"MM/DD/YYYY :) HH*mm*ss"
];
moment("2015-06-22T13:17:21+0000", formats, true).isValid(); // true
moment("06/22/2015 :) 13*17*21", formats, true).isValid(); // true
moment("06/22/2015 :( 13*17*21", formats, true).isValid(); // false
Bakınız: DEMO .
Diğer kütüphaneler
Moment.js'yi kullanmak istemiyorsanız, başka kütüphaneler de vardır:
2016 Güncellemesi
An (ama bir altkümesi) gibi, ama mevcut nesnelerin mutasyonunun neden olduğu sürprizler olmadan yakın modülü oluşturdum ( daha fazla bilgi için belgelere bakın ).
2018 Güncellemesi
Bugün , Moment yerine tarih / saat manipülasyonu için Luxon'u kullanmanızı öneririm ( Moment'in aksine) tüm nesneleri değişmez hale getirir, böylece tarihlerin örtük mutasyonu ile ilgili kötü sürprizler olmaz.
Daha fazla bilgi
Ayrıca bakınız:
Rob Gravelle tarafından JavaScript tarih ayrıştırma kitaplıkları hakkında bir dizi makale:
Sonuç olarak
Tabii ki herkes tekerleği yeniden icat etmeye çalışabilir, düzenli bir ifade yazabilir (ancak bunu yapmadan önce lütfen ISO 8601 ve RFC 3339'u okuyun) ya da buit hata yapıcılarını 'Invalid Date'
(Bu mesajın aynen tüm platformlarda? tüm bölgelerde ise? gelecekte?) veya bir test çözümü kullanın ve onu geliştirmek için zaman kullanabilirsiniz, bunu yeniden icat değil. Burada listelenen tüm kütüphaneler açık kaynak kodlu, özgür yazılımdır.