2014-12-31 48 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 
    } 
}