原文:https://zhidao.baidu.com/question/1701946584925153620.html
要想精確驗證,最容易想到的方法就是通過月份判斷日期是否合法(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 check(date){ 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