js學習分享:[5]js判斷日期是否正確有效??

Tags: 格式, 日期,

上一篇,我們介紹了 《js驗證日期格式 時間格式是否正確?》,這裡我們將說一下,怎麼用js判斷用戶輸入的日期是不是正確,比如:用戶輸入2015-02-30,顯然這是一個錯誤的日期,那麼js是怎麼做判斷的呢?

工具/原料

電腦(win8操作系統)

谷歌瀏覽器 版本:40.0.2214.93 m

VS2012開發工具

方法/步驟

那麼我們先在網頁上面放一個輸入框,一個按鈕,點擊這個按鈕的時候,我們來檢查輸入框內輸入的日期是不是正確的日期,創建輸入框和點擊按鈕的HTML代碼如下:

輸入您要驗證的日期:



(注意:這裡的日起必須為:yyyy-mm-dd,yyyy/mm/dd這種格式,如果是2015-1-1則不能正常驗證)



網頁效果圖如下:

js學習分享:[5]js判斷日期是否正確有效?

我在按鈕上面綁定一個js單擊事件,單擊按鈕後我們會調用IsDate()函數對輸入的日期格式進行檢測,定義函數和按鈕添加點擊事件的html代碼如下:

輸入您要驗證的日期:



(注意:這裡的日起必須為:yyyy-mm-dd,yyyy/mm/dd這種格式,如果是2015-1-1則不能正常驗證)



js學習分享:[5]js判斷日期是否正確有效?

我們已經完成了準備工作,剩下就可以進行測試了,這裡我們測試的是必須滿足yyyy-mm-dd日期格式,如果我們我們輸入:2015-02-30或者2015/02/30,系統則提示:”日期錯誤“。

測試結果如圖:

js學習分享:[5]js判斷日期是否正確有效?

js學習分享:[5]js判斷日期是否正確有效?

如果我們我們輸入:2015-02-28或者2015-02-28 則提示:“日期正確”。

測試結果如圖:

js學習分享:[5]js判斷日期是否正確有效?

js學習分享:[5]js判斷日期是否正確有效?

在這裡,對function IsDate()這個函數做一下說明:

通常來說,javascript驗證日期的有效性可以通過正則判斷

但正則表達式無法精準驗證日期的有效性,你無法通過正則表達式判斷出1900-02-29是非法日期而2000-02-29是合法日期,而且正則表達式匹配起來比較繁瑣。

要想精確驗證,最容易想到的方法就是通過月份判斷日期是否合法(1~28/29/30/31),你可以用一個數組表示每月的天數,如daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31],但你會發現daysInMonth[1]這個值可能是28或29,你又要寫一個判斷閏年的函數來解決這個問題......

這至少要花費20行以上的代碼來完成這件事,而通過javascript中的Date對象,我們只需要1行代碼即可完成上述功能。

function IsDate(){

var date = document.getElementById("date").value;

return (new Date(date).getDate()==date.substring(date.length-2));

}

date為一個待檢查的類日期字符串(如2013-01-01、2013/01/01、2013/01/32、2013/02/29),不論這個字符串是否正確

通過新建的Date對象(new Date(date)),可以識別出該日期是否正確,如果不正確則返回Invalid Date

但這樣會有一個bug,當日期的值在1-31之間,new Date總返回一個新的對象,不論該月份是否存在這個日期(如2013-02-30將返回日期對象Sat Mar 02 2013 08:00:00 GMT+0800 (中國標準時間)),返回結果是下個月的日期而不報錯

所以要用getDate()方法獲取日期(new Date('2013-02-30')對象的getDate()方法將返回2)

date.substring(date.length-2)會獲取到字符串最後兩位也就是日期的部分,這與Date對象的日期部分做比較,如果相等則說明日期有效,否則為無效日期

如果日期無效則'=='左邊值為NaN,右邊無論是什麼(''、null、undefined、NaN等)結果都為false

格式, 日期,
相關問題答案