2011-07-23 54 views
6

Kullanıcı değişkenine göre bir tarih, ay ve yılı içeren üç değişkene rastlarım. Ayın 1 ile 12 arasında olup olmadığını kontrol ettim.JavaScript'de tarih kontrol edin

Şimdi gerçek bir tarih olup olmadığını ve 31–06–2011 gibi olmayan bir tarih olup olmadığını kontrol etmek istiyorum.

Benim ilk fikir, yeni bir tarihi örneğini yapmaktı:

var year = 2011; 
var month = 5; // five because the months start with 0 in JavaScript - June 
var day = 31; 
var myDate = new Date(2011,5,31); 
console.log(myDate); 

Ama geçerli bir tarih değil çünkü myDate, yanlış döndürmez. Bunun yerine 'Cum 01 Tem 2011 [...]' i döndürür.

Geçersiz bir tarihi nasıl kontrol edebileceğime dair herhangi bir fikriniz var mı?

+0

Yığın Taşması'na Hoş Geldiniz, dotweb! Lütfen başlığa etiket koymayın, teşekkürler! –

+0

Ne? Anlamadım üzgünüm. –

+0

Etiketler etiketlere [başlıkta değil] aittir (http://meta.stackexchange.com/questions/66152/titles-should-the-most-relevant-tag-be-included-in-the-title) . –

cevap

11

bu deneyin: Muhtemelen şu anda ne yapabilirdi

if ((myDate.getMonth()+1!=month)||(myDate.getDate()!=day)||(myDate.getFullYear()!=year)) 
    alert("Date Invalid."); 
+0

Teşekkürler! iyi fikir. –

+0

Sadece iki bileşeni kontrol etmeniz yeterlidir, ancak her üçü de zarar vermez. :-) – RobG

0

ve yeni bir Date nesnesi oluşturmak ve sonrasında myDate.getFullYear(), myDate.getMonth() değerini kontrol myDate.getDate(), bu değerlerin giriş değerleriyle eşleştiğinden emin olmak için.

function isValidDate(year, month, day) { 
    var d = new Date(year, month, day); 

    return d.getFullYear() === year && d.getMonth() === month && d.getDate() === day; 
} 

console.log(isValidDate(2011,5,31)); 
console.log(isValidDate(2011,5,30)); 
5
if ((myDate.getDate() != day) || 
    (myDate.getMonth() != month - 1) || 
    (myDate.getFullYear() != year)) 
{ 
    return false; 
} 

JavaScript sadece Date girilen dönüştürür: getMonth() ve getDate() Ocak ay 0 yani, 0 endeksli ve Aralık İşte

ay 11 olduğunu unutmayın bir örnek kurucu month, year, day, vb. basit int değerinde (milisaniye) ve sonra dize biçiminde temsil edecek şekilde biçimlendirir. new Date(2011, 100, 100)'u yaratabilirsiniz ve her şey tamam olacak :)

0

Bu şekilde düşünüyorum.

function isValidDate(year, month, day) {  
     var d = new Date(year, month, day); 
     if(month == 12){ 
      year = parseInt(year)*1+1*1; 
      month = 0; 
     } 
     day = parseInt(day); 
     month = parseInt(month); 
     year = parseInt(year); 
     if(month === 2 && day > 29){ 
      return false; 
     } 
     return d.getFullYear() === year && d.getMonth() === month && d.getDate() === day; 
    } 
+1

Ehm, bu zaten bir yıldan fazla bir süre önce cevaplandı! Yine de teşekkürler. –