我的代码出了问题。 我想要它,所以如果用户要选择昨天或任何以前的日期,它应该给出一个警告框告诉用户#Please输入一个vlid日期'
当我选择昨天的日期时,它会给我一条警告信息。 当我选择今天的日期时,它会给我一个警告信息。 当我选择明天约会时,它会给我一个警告信息。
为什么当我选择今天的消息时,它会给我一条提示信息?
<input type='date' onchange="validateDate()" id='mydate'></input>
<script>
function validateDate() {
var userdate = new Date(document.getElementById("mydate").value);
var today = new Date();
if(userdate < today){
alert('Your message');
}
}
</script>
答案 0 :(得分:2)
这是因为日期输入仅设置日期本身,并将小时,分钟和秒留为00:00:00。因此,new Date()
的输出(包括此附加数据)将始终大于当天输入日期的输出。
为了解决这个问题,您可以使用不同的值来反映今天的时间,就像日期输入中的值只包含年,月,日和时区偏移。
如下:
var today = new Date();
var todayForComparison = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, -today.getTimezoneOffset());
现在,在if语句中使用“todayForComparison”而不是原始的“today”变量。
答案 1 :(得分:1)
new Date(document.getElementById("mydate").value)
返回的日期值的时间为00:00
。这就是为什么当你选择今天的日期时,你就能看到警报。
答案 2 :(得分:1)
您正在将一个空时间(00:00)的日期与一个完整的dateTime(xx:xx)进行比较。 您应该在比较日期之前删除dateTime。
答案 3 :(得分:0)
DEMO
首先将用户值转换为日期格式并使用getTime函数()来比较有很多方法比这更好,最好你可以使用moment.js
var userDate = new Date(document.getElementById("mydate").value);
var today = new Date();
if (today.getTime()>userDate.getTime()) {
alert("invalid date");
}
答案 4 :(得分:0)
这里是the fiddle,我从js添加了一个事件监听器:
var el = document.getElementById("mydate");
el.onchange = onChangeDate;
function onChangeDate(e){
if(new Date(el.value) < new Date()){
alert("invalid date");
}
}