比较当前日期和日期inp
我想知道这个代码中的错误是什么。我想与用户输入的日期比较当前日期和日期inp
<script type="text/javascript">
function validate()
{
if(document.myForm.name.value == "")
{
alert("Please provide your date of birth!");
document.myForm.dob.focus() ;
return false;
}
var q = new Date();
var m = q.getMonth();
var d = q.getDate();
var Y = q.getFullYear();
var date = new Date(Y,m,d);
var r = document.getElementById(dates).value;
var m1 = r.getMonth();
var d1 = r.getDate();
var Y1 = r.getFullYear();
var mydate = new Date(Y1,m1,d1) ;
if(date<=mydate)
{
alert("greater");
return false;
}
else
{
alert("smaller");
return false;
}
return true;
}
</script>
<form name="myForm" method="post" onsubmit= "return(validate());">
Name: <input type="text" name="name"><br>
Date: <input type="date" id="dates" name="dates">
<br/>
<INPUT TYPE="submit" VALUE="Submit" >
</form>
我觉得比较今天的日期“变种R =的document.getElementById(日期).value的;”这段代码是不工作
你有几个错字和逻辑错误。此代码应该可以工作。
function validate()
{
if(document.myForm.name.value == "")
{
alert("Please provide your date of birth!");
document.myForm.dob.focus() ;
return false;
}
var q = new Date();
var m = q.getMonth();
var d = q.getDate();
var y = q.getFullYear();
var date = new Date(y,m,d);
var r = Date.parse(document.getElementById("dates").value);
if(date<=r)
{
alert("greater");
return false;
}
else
{
alert("smaller");
return false;
}
return true;
}
这一个正常工作与小的变化 - 分号后警告(“小”);“ – 2014-10-30 13:23:01
Opps,我的错误,当我复制和粘贴。谢谢。 – 2014-10-31 02:11:33
函数名称应该是:
document.getElementById
(你缺少一些大写字母)
而且,你是治疗的document.getElementById(dates).value
结果,就好像它会给你返回一个Date对象,但它实际上会给你一个字符串 - 在你调用getMonth/getData/getFullYear之前,你需要将它转换成Date,this question的答案应该可以帮助你。
是不是使用'var date = new Date(Y,m,d);'也不正确?据我了解,这是使用一个变量'Y',没有定义任何地方。 – 2014-10-30 09:04:05
@CalvinScherle是的,它应该是小写的Y. – Scimonster 2014-10-30 09:04:29
实际上,与之后声明的'myDate'变量相同。'alert(“small”)'后面还有一个缺失的分号。 – 2014-10-30 09:05:10
我在下面的代码主要错误的地方放置注释。
function validate()
{
if(document.myForm.name.value == "") // Not an error per se, but you should use === to compare strings this way
{
alert("Please provide your date of birth!");
document.myForm.dob.focus() ;
return false;
}
var q = new Date();
var m = q.getMonth();
var d = q.getDate();
var y = q.getFullYear();
var date = new Date(Y,m,d); // The variable Y is not defined. You probably meant lowercase y.
var r = document.getElementbyid(dates).value; // Wrong case. Should be: document.getElementById
var m1 = r.getMonth();
var d1 = r.getDate();
var y1 = r.getFullYear();
var mydate = new Date(Y,m,d) ; // Same thing, probably meant lowercase y again.
if(date<=mydate)
{
alert("greater");
return false;
}
else
{
alert("smaller") // This statement is missing a semicolon
return false;
}
return true;
}
此外,它还不完全清楚你正在尝试做什么。最后,假设你解决这些语法错误,你有三个日期变量:
q
,这与当前的日期和时间创建。date
,它刚刚通过了与q
相同的当前日期和时间。mydate
,其中...也包含当前日期和时间,因为您刚传递给您q
的相同值,您传递给date
。
那么既然你比较两个日期对象设置为相同的日期,你将永远提醒“大”(这是不是真的更大,因为他们是平等的,但是那是另外一个问题)。
我也觉得很奇怪,这个验证函数在所有情况下返回false
。由于您的if/else语句,因此无法返回true
。对于一个应该验证某个东西的函数,验证总是返回false似乎很奇怪。
此外,如在@codebox他的回答说:document.getElementById(dates).value
只是返回一个字符串,则必须转换到一个新的Date对象,如果你想读它的日期值到您的m1
,d1
和y1
变量(目前为止,它们甚至从未被使用过)。
'getElementbyid'应该是'getElementById' – pawel 2014-10-30 09:03:15