2015-02-06 55 views
0

我正在做一些驗證與Date(),我注意到,如果我創建一個兩位數的年份而不是四個Date(01/01/55)的無效日期那麼當前世紀將前綴到年 - 55年成爲1955年 - 而不是一個無效的日期對象,我可以用NaN測試。Javascript日期驗證 - 前綴19(世紀)到兩位數日期

這是一個問題,因爲我讓用戶無需任何「/」輸入日期,然後我創建使用substr日期:

  // Check date is in correct format 
      var fDate = val.split('/'); 
      // Should have 3 parts 
      if (fDate.length != 3) { 
       var day = val.substr(0, 2); 
       var month = val.substr(2, 2); 
       var year = val.substr(4, 4); 

       val = day + '/' + month + '/' + year; 
       control.val(val); 
      } 

因此,如果用戶輸入010155我的邏輯把它變成01/01/55然後Date()創建日期01/01/1955,但相反,我想它創建一個無效的日期對象。

+1

你可能應該做自己的驗證 - 不幸的是,瀏覽器處理非標準日期格式的方式不一致。 – 2015-02-06 14:06:49

+0

也許使用像http://momentjs.com/這樣的庫是個不錯的選擇 – dec 2015-02-06 15:52:12

回答

0

好吧,我開發了一個解決方案,做我很滿意的。 momentjs.com看起來不錯,我可能可以使用它,但我使用jqueryui.com Datepicker,它使用Date,我希望用戶能夠輸入不含年份,1或2個數字年的日期,默認爲本世紀初。

var cYear = new Date().getFullYear(); 
        var c = cYear.toString().substr(0, 2); 

        day = val.substr(0, 2); 
        if (day > 31) { 
         leftOverD = day.charAt(1); 
         day = "0" + day.charAt(0); 
        } else if (day.length == 1) { 
         day = "0" + day; 
        } else if (day.length == 0) { 
         day = "01"; 
        } 

        month = (leftOverD) ? leftOverD + val.charAt(2) : val.substr(2, 2); 
        if (month > 12) { 
         leftOverM = month.charAt(1); 
         month = "0" + month.charAt(0); 
        } else if (month.length == 1) { 
         month = "0" + month; 
        } else if (month.length == 0) { 
         month = "01"; 
        } 

        var strYear; 
        if (leftOverD && leftOverM) { 
         strYear = val.substr(2, 4); 
        } else if (leftOverD || leftOverM) { 
         strYear = val.substr(3, 4); 
        } else if (!leftOverD && !leftOverM) { 
         strYear = val.substr(4, 4); 
        } 

        year = strYear; 
        if (year.length == 0) { 
         year = c + "00"; 
        } else if (year.length == 1) { 
         var nYear = c + '0' + year; 
         if (nYear > cYear) 
          nYear = (c - 1) + '0' + year 

         year = nYear; 
        } else if (year.length == 2) { 
         var nYear = c + year; 
         if (nYear > cYear) 
          nYear = (c - 1) + year 

         year = nYear; 
        } 

ps。在JS中處理日期是一場噩夢。爲什麼不簡單地有一個Date()構造函數接受文化?