2014-01-06 29 views
2

我想寫一個日期驗證器,將採用格式爲ddmmyyyy的長度爲8的字符串輸入日期。它需要檢查所有基礎的有效日期,並作爲結果返回true或false。創建一個日期驗證器

我無法使用額外的庫,如時刻,我不能使用正則表達式(這不是一個家庭作業,我只是被告知在這些約束下工作)。

如果有人能告訴我我的下面有什麼問題,我將不勝感激!

function isValidDate(i) { 

    if (i.length == 8) { 
     var dd = i.substring(0, 2); 
     var mm = i.substring(2, 4); 
     var yyyy = i.substring(4, 7); 
     var day = parseInt(dd,10); 
     var month = parseInt(mm,10); 
     var year = parseInt(yyyy,10); 
     if (year % 4 != 0 && day = 29 && month = 02) { 
      return false; 
     } else if (day > 31) { 
      return false; 
     } else if (month > 12) { 
      return false; 
     } else { 
      return true; 
     } 
    } else { 
     return false; 
    } 
    return true; 
} 
+3

在將字符串分割爲變量'yyyy','mm','dd'後,您可以從該數據創建一個新的Date對象,並檢查Date對象是否具有與創建Date對象相同的變量。 – Epsil0neR

+1

您的函數允許每天只有30天的日期爲31天 – Barmar

+2

除了閏年(但不知道閏年的世紀規則),它還允許2月30日和2月31日但不是2月29日。 – Barmar

回答

1

你可以使用這樣的功能。此函數檢查提供的參數是否爲有效整數(通過解析它們爲整數並檢查它們是否爲NaN),然後檢查月和日是否有效,但不驗證年,因爲年可以是任何數字:)

function dateValidation(year, month, day){ 
    // Check arguments 
    year = parseInt(year); 
    if (isNaN(year)) return false; 

    month = parseInt(month); 
    if (isNaN(month)) return false; 

    day = parseInt(day); 
    if (isNaN(day)) return false; 

    // Check if month is correct 
    if (!(month >= 1 && month <= 12)) return false; 

    switch (month){ 
     case 1: //January 
     case 3: // March 
     case 5: // May 
     case 7: // July 
     case 8: // Augyst 
     case 10:// October 
     case 12:// December 
      return (day > 0 && day <= 31); // Maximum days is 31 in these months 
      break 
     case 4: // April 
     case 6: // June 
     case 9: // September 
     case 11:// November 
      return (day > 0 && day <= 30); // Maximum days is 30 in these months 
      break 
     case 2: // February 
      if (year % 4 != 0){ 
       return (day > 0 && day <= 28); 
      } else { 
       return (day > 0 && day <= 29); 
      break 
      } 
     default: 
      return false; 
    } 
} 
+1

謝謝你的使用情況是非常有幫助的。 – user3165009

+0

您也可以投票支持這個答案(投票) – Epsil0neR

+0

不符合我的聲譽,我顯然不能! – user3165009

1

您的第一個誤區是在比較中使用=而不是==。

下一個是用02的整數這是不可能的,因爲parseInt函數將使2出的02所以只比較== 2

if (year % 4 != 0 && day == 29 && month == 2) { 

如果分配總是會在返回真實的說明和一年%4在2014年不是0,所以你總是會以「return false」結尾,直到2016年

+0

謝謝,爲這樣愚蠢的錯誤道歉。 – user3165009