2016-10-19 91 views
20

Şu senaryo aşağıdadır:Tarih js kullanılarak tarihin geçerli olup olmadığı nasıl kontrol edilir?

Farklı olan dize tarih ve tarih biçimine sahibim.

ex. tarih 2016-10-19 ve dateFormat "DD-MM-YYYY" dır.

Bu tarihin geçerli bir tarih olup olmadığını kontrol etmem gerekiyor.

ben yanlış her iade edilir şunları

var d = moment("2016-10-19",dateFormat); 

d.isValid()

çalıştılar. An, belirtilen formatta tarihi ayrıştırmıyor mu?
var d = moment("2016-10-19").format(dateFormat); 
var date = moment(d, dateFormat); 

şimdi date.isValid() bana istenilen sonucu veriyor Ama burada anı nesnesi iki kez oluşturulur:

Sonra ilk GG-AA-YYYY tarih biçimlendirmek ve daha sonra anı geçmeye çalıştı. Bunu nasıl önleyebilirim? Daha iyi bir çözüm var mı?

FYI dateFormat öğesinin değiştirilmesine izin verilmiyor. İşte

+0

dateFormat değerini değiştirmeye izin verilmiyor mu? Bu durumda, girişin biçimini değiştirmek zorundasınız, çünkü 2016-10-19 YYYY-AA-GG, DD-AA-YYYY değil. Ne değiştirebilirsin? – Pochen

+0

Giriş, tarih seçiciden geliyor. Bunu değiştiremezsiniz :( – Ganesh

+1

Neden dateFormat değişkeni değiştirmenize izin verilmediğini sorabilir miyim? var d = moment ("19-10-2016", "DD-MM-YYYY"), sorunlarınızı çözer – Pochen

cevap

25

https://jsfiddle.net/xs8tvox9/ çözüm bulmak mümkün oldu bu örnekte seçicinizde geliyor. Aldığım tarih ISO formatında olduğundan, yalnızca bir an için tarih sağlayarak, dateFormat'ı geçmeye gerek yoktur.

Ve sonra istenilen sonucu verir. Sıkı ayrıştırmayı zorlar moment çağrılırken

+2

Biçimin tarihe nasıl ayrılacağını bilmesini istersiniz, aksi halde tarayıcılar arasında güvenilir olmayan Date() konumuna geri döner. an ("2016-10-19", "YYYY-AA-GG") –

4

gitmek: Working Fidddle

$(function(){ 
    var dateFormat = 'DD-MM-YYYY'; 
    alert(moment(moment("2012-10-19").format(dateFormat),dateFormat,true).isValid()); 
}); 
+0

Ben dateFormat 'DD-MM-YYYY' dediğim gibi ve ben değilim değiştirmesine izin verildi. – Ganesh

+0

Oh Görüyorum. Bunu göreyim. – gschambial

+0

Bu tarih dizgisini '2016-10-19' arasında değiştirebilir miyim? – gschambial

-2

Bunu deneyin. Bu hoş değil ama giriş tarih seçiciden sabit biçim olduğu sürece çalışacaktır.

It

shittyDate

var dateFormat = 'DD-MM-YYYY' 
var shittyDate = "2016-10-19"; 

var splittedDate = shittyDate.split('-'); 

if (splittedDate.length == 3) { 
    var d = moment(splittedDate[2]+"-"+splittedDate[1]+"-"+splittedDate[0], dateFormat); 
    alert(d.isValid()) 
} else { 
    //incorrectFormat 
}