2017-08-08 101 views
1

我想在Java腳本中用try catch來驗證日期輸入,但下面的代碼不能像我期望的那樣工作。 我期望輸入日期不是日期時的錯誤,catch應該執行,但這是我得到的。看到沒有新的日期,沒有顯示我所期望的。建議嘗試趕上javascript

console.log("min date :") 
    try{ 
     minDate = new Date(elminDate.value) 
    } 
    catch(e){ 
     console.log("error::") 
     console.log(err.name) 
     console.log("changed min") 
     minDate = new Date() 
    } 
    console.log(minDate) 

    console.log("max date :") 
    try{ 
     maxDate = new Date(elmaxDate.value) 
    } 
    catch(err){ 
     console.log("error::") 
     console.log(err.name) 
     console.log("changed max") 
     maxDate = new Date() 
    } 
    console.log(maxDate) 

響應:

[Log] min date : (home.html, line 93) 
[Log] Tue Aug 01 2017 02:00:00 GMT+0200 (CEST) (home.html, line 103) 
[Log] max date : (home.html, line 105) 
[Log] Invalid Date (home.html, line 115) 
+2

你確定日期構造函數拋出?當我使用無效數據時,我只是得到一個'日期',當轉換爲字符串時顯示'無效日期'。另見[這篇文章](https://stackoverflow.com/questions/1353684/detecting-an-invalid-date-date-instance-in-javascript) – ASDFGerte

+0

是的,我得到無效的日期,所以它只是一個字符串?我正在等待一個錯誤,但正如你所說,不會拋出它。 –

+0

請參見[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_date),只有無效日期**上的某些方法可能會拋出,構造函數不會從我讀過的東西中解脫出來。這意味着它是一個無效的Date對象,不會拋出異常。再次請參閱[本文](https://stackoverflow.com/questions/1353684/detecting-an-invalid-date-date-instance-in-javascript)來檢測無效日期。 – ASDFGerte

回答

2

Date構造方法不拋出無效日期的異常,而是產生在Date對象NaN值。你可以測試:

console.log("date :"); 
date = new Date(elDate.value); 
if (isNaN(date)) { 
    console.log("error: Invalid Date"); 
    console.log("changed date to now"); 
    date = new Date(); 
} 
console.log(date)