2009-11-19 107 views
4

我有一個HTML文本字段。我想通過JavaScript驗證輸入的值是「MM/DD/YY」還是「MM/D/YY」或「MM/DD/YYYY」或「MM/D/YYYY」的有效日期。有沒有這樣的功能?JavaScript - 驗證日期

我覺得有點像isNaN,但我什麼也沒看到。 JavaScript確實無法驗證日期嗎?

+2

JavaScript無法驗證日期。但是你可以用Javascript驗證日期。 – rogeriopvl 2009-11-19 21:05:26

回答

9

JavaScript是否確實無法驗證日期?

是否有做這樣的功能?

你需要編寫自己的驗證函數來解析日期格式(正則表達式想到的),然後確定它是否是特定條件內有效號。

+2

即使我明確回答了這兩個問題並提供了其他信息,我也很喜歡這種情況:P – 2009-11-19 21:11:52

+8

這個答案非常精確,而且沒有這個例子很沒用 – piotrga 2013-03-10 10:21:32

+2

同意,只有一半答案 – drogon 2013-09-18 17:01:25

0

你有沒有用Google搜索javascript date validation?它顯示了一些很好的信息,以及一個工作代碼示例here

+9

抱歉是PITA,但如果每個人被告知谷歌它,這將不需要這個網站。這個網站是爲人們提供建議和代碼,而不是隻是說谷歌它! – 2009-11-19 21:10:43

+1

我*只是*說谷歌它?你不能看到我給他(一個鏈接)的代碼示例? – 2009-11-19 21:13:09

+5

另外,加里,你不同意有些*做*需要被告知谷歌一點? – 2009-11-19 21:15:41

1

如果你想冒險進入JQuery的領域,有很多驗證插件,包括日期驗證。 This plugin是我用過的幾次,並且很好地服務了我。

2

結賬http://momentjs.com/。使用時,該片段

時刻(yourCandidateString, 'MM-DD-YYYY')。isValid()的

應該做的工作。

0

我建議你幾個解決方案。

  1. 用日期選擇器指導用戶輸入。這樣你可以控制輸入格式。 jQueryui datepicker是一個流行的實現。

  2. 使用js庫來管理日期時間數據類型(不是Javascript中的實際數據類型!!)。我建議你date.js

1
<input type="text" id="dateinput"/> 

<script type="text/javascript"> 
    $(#"dateinput").datepicker({ 
     buttonImage: "images/calendar.png", 
     dateFormat: "yyyy-MMM-dd" 
    }); 

    function validateDate() { 
     if ($(#"dateinput").val().trim() == "") { 
      // Is a blank date allowed? 
      return true; 
     } 
     var oldVal = $(#"dateinput").val(); // Current value in textbox 
     // Now use jQueryUI datepicker to try and set the date with the current textbox value 
     $(#"dateinput").datepicker("setDate",$(#"dateinput").val()); 
     // Check if the textbox value has changed 
     if (oldVal != $(#"dateinput").val()) { 
      // The datepicker will set something different if the date is invalid 
      $(#"dateinput").val(oldVal); // Set the textbox back to the invalid date 
      alert ("date was invalid"); 
      return false; 
     } else { 
      // If nothing changed, the date must be good. 
      return true; 
     } 
    } 
</script> 
6

你可以使用JavaScript自己的Date對象,檢查日期。由於日期對象允許對月份和日期值進行一些修改(例如,3月32日將更正爲4月1日),因此您可以檢查創建的日期是否與您輸入的日期相匹配。如果您想要,可以縮短此日期,但清晰度要長一些。

function checkDate(m,d,y) 
{ 
    try { 

     // create the date object with the values sent in (month is zero based) 
     var dt = new Date(y,m-1,d,0,0,0,0); 

     // get the month, day, and year from the object we just created 
     var mon = dt.getMonth() + 1; 
     var day = dt.getDate(); 
     var yr = dt.getYear() + 1900; 

     // if they match then the date is valid 
     if (mon == m && yr == y && day == d) 
     return true; 
     else 
     return false; 
    } 
    catch(e) { 
     return false; 
    } 
} 
1

似乎沒有這樣做的內置函數。但是,此代碼可能是你在找什麼:

<script type="text/javascript"> 

/**-------------------------- 
//* Validate Date Field script- By JavaScriptKit.com 
//* For this script and 100s more, visit http://www.javascriptkit.com 
//* This notice must stay intact for usage 
---------------------------**/ 

function checkdate(input){ 
    var validformat=/^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity 
    var returnval=false 
    if (!validformat.test(input.value)) 
     alert("Invalid Date Format. Please correct and submit again.") 
    else{ //Detailed check for valid date ranges 
     var monthfield=input.value.split("/")[0] 
     var dayfield=input.value.split("/")[1] 
     var yearfield=input.value.split("/")[2] 
     var dayobj = new Date(yearfield, monthfield-1, dayfield) 
     if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield)) 
      alert("Invalid Day, Month, or Year range detected. Please correct and submit again.") 
     else 
      returnval=true 
    } 
    if (returnval==false) input.select() 
    return returnval 
} 

</script> 

來源:http://www.javascriptkit.com/script/script2/validatedate.shtml

0

這是我用它來驗證日期。

Date.parse返回無效日期的NaN。

這支持日期和日期+時間格式。

希望這會有所幫助。

var msg; 
var str = "2013-12-04 23:10:59"; 
str = "2012/12/42"; 
var resp = Date.parse(str); 
if(!isNaN(resp)) { msg='valid date'; } else { msg='invalid date'; } 
console.log(msg); 
+0

這不是一個好方法。正如user1883048的回答中所述,某些JavaScript引擎會解析無效日期。 2/31/2014成爲3/3/2014。 55/55/5555成爲Firefox 2024年的一段時間。 – Quickhorn 2014-06-04 17:47:26