這裏是我的問題:新日期將無效的日期,也無法驗證日期正確
new Date('02/30/2000')
的Javascript轉換爲:
Wed Mar 01 2000 00:00:00 GMT-0300 (Local Standard Time)
我不能驗證日期這樣,如果JavaScript的保留「自動更正'日期。
我正在使用isNaN
來檢查日期是否有效,但我想它永遠不會工作,因爲我想。
我該如何解決這個問題?
這裏是我的問題:新日期將無效的日期,也無法驗證日期正確
new Date('02/30/2000')
的Javascript轉換爲:
Wed Mar 01 2000 00:00:00 GMT-0300 (Local Standard Time)
我不能驗證日期這樣,如果JavaScript的保留「自動更正'日期。
我正在使用isNaN
來檢查日期是否有效,但我想它永遠不會工作,因爲我想。
我該如何解決這個問題?
您描述的行爲恰恰是JavaScript Date
對象的工作原理。 The MDN reference把它描述得很好如下:
注:凡日期被稱爲具有一個以上參數的構造,如果值低於其邏輯範圍更大(如13設置爲月份值或分鐘值爲70),相鄰值將被調整。例如。 新日期(2013,13,1)相當於新日期(2014,1,1),均創建日期爲2014-02-01(注意該月爲0)。同樣對於其他值:新日期(2013,2,1,0,70)相當於新日期(2013,2,1,1,10)這兩者都創建日期爲2013-03-01T01 :10:00。
有沒有內置的方法來解決此問題。但是,已經編寫了一些庫來解決Date對象的這個問題和其他問題。具體而言,可以考慮moment.js:
moment('02/30/2000','MM/DD/YYYY').isValid() // false
var dateString = '01/03/2012';
var checkDate;
var flag = true;
try {
checkDate = $.datepicker.parseDate('mm/dd/yy', dateString);
} catch (e) {
flag = false;
}
if(flag)
alert('Valid Date');
else
alert('Invalid Date');
這裏是你如何能做到這一點:
var ValidDate = function (string) {
var dateParts = string.match(/(\d{2})\/(\d{2})\/(\d{4})/),
year = dateParts[3],
month = dateParts[1],
day = dateParts[2];
var jsDate = new Date(string);
if (year != jsDate.getFullYear() || month != jsDate.getMonth() + 1 || day != jsDate.getDate()) {
return NaN;
}
return jsDate;
}
console.log(ValidDate("01/05/1989")); // => Thu Jan 05 1989 ...
console.log(ValidDate("40/05/2010")); // => NaN
console.log(ValidDate("05/40/2000")); // => NaN
哇! - 誰說的JQuery或日期選擇器什麼? – 2014-11-03 18:34:24
我認爲最好是使用jquery而不是使用全新的資產來驗證日期 – rishiAgar 2014-11-03 18:36:36