2014-12-31 83 views
3

我有這個代碼,我想檢查一個日期是否過去。我希望在提交表格之前儘快檢查它。檢查日期是否過去未提交表格

<input id="datepicker" onchange="checkDate()" required class="datepicker-input" type="text" data-date-format="yyyy-mm-dd" > 

<script type="text/javascript"> 
function checkDate() { 
    var selectedDate = document.getElementById('datepicker').value; 
    var now = new Date(); 
    if (selectedDate < now) { 
    alert("Date must be in the future"); 
    } 
} 
</script> 

這不起作用,如果我在過去輸入日期(例如2014-12-03)它不顯示警報。

+2

因爲字符串不是日期。 – epascarello

+0

雖然yyyy-mm-dd – Alex

+0

輸入的格式是這種格式,但它仍然是一個字符串,而不是日期。輸入值不是日期對象。 – epascarello

回答

11

所有你需要做的是使用Date構造new Date("2014-06-12")

function checkDate() { 
 
    var selectedText = document.getElementById('datepicker').value; 
 
    var selectedDate = new Date(selectedText); 
 
    var now = new Date(); 
 
    if (selectedDate < now) { 
 
    alert("Date must be in the future"); 
 
    } 
 
}
<input id="datepicker" onchange="checkDate()" required class="datepicker-input" type="date" data-date-format="yyyy-mm-dd" >
轉換由 <input>生成的字符串轉換爲日期

+0

這不起作用。但似乎這個問題是另一回事。即使我這樣做: $(「#datepicker」)。change(function(){ alert(「test」); }); 警報不顯示 – Alex

+0

它對我有用嗎?嘗試在框中輸入2014-06-12並按下回車鍵(您需要按回車或更改控件的焦點以觸發onchange事件) – Miguel

+0

ah ok。我刪除了日期選擇器插件,它工作。如何使用日期選取器插件工作 – Alex

0

你的代碼是非常接近,試試這個來代替:

var selectedDate = $('#datepicker').datepicker('getDate'); 
var now = new Date(); 
if (selectedDate < now) { 
    // selected date is in the past 
} 
+0

我在另一篇文章中看到了這一點,它並不適合我。 – Alex

+0

請嘗試使用的getTime函數來比較日期... 如果(selectedDate.getTime() joydesigner

+1

據我所知,這個解決方案取決於是否擁有jQuery UI的安裝。它基本上是將您的輸入字段轉換爲日期選擇器小部件。它會工作,但它是完全沒有必要的。 – Miguel

0

date()函數返回一個字符串。試試這兩個日期轉換爲整數首先使用Date.parse()功能:

<input id="datepicker" onchange="checkDate()" required class="datepicker-input" type="text" data-date-format="yyyy-mm-dd" > 
 

 
<script type="text/javascript"> 
 
    function checkDate() { 
 
     var selectedDate = document.getElementById('datepicker').value; 
 
     var now = new Date(); 
 
     var dt1 = Date.parse(now), 
 
     dt2 = Date.parse(selectedDate); 
 
     if (dt2 < dt1) { 
 
      alert("Date must be in the future"); 
 
     } 
 
} 
 
</script>

+0

看來問題是別的,因爲即使我這樣做:$(「#datepicker」)。change(function() {alert(「test」);}); 警報不顯示 – Alex

+0

我建議你看看你的瀏覽器的控制檯;你可能在別處有錯誤 –

0

對於那些誰使用type =「日期」(與HTML5引入的),而不是類型=「文本」,它可以是這樣做:

function checkDate() { 
    var date = this.value; 
    if(date.valueAsDate <= new Date()) { 
     //Date in the past 
    } else { 
     //Date in the future 
    } 
}