比较当前日期和日期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的;”这段代码是不工作

+0

'getElementbyid'应该是'getElementById' – pawel 2014-10-30 09:03:15

你有几个错字和逻辑错误。此代码应该可以工作。

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; 
} 
+0

这一个正常工作与小的变化 - 分号后警告(“小”);“ – 2014-10-30 13:23:01

+0

Opps,我的错误,当我复制和粘贴。谢谢。 – 2014-10-31 02:11:33

函数名称应该是:

document.getElementById 

(你缺少一些大写字母)

而且,你是治疗的document.getElementById(dates).value结果,就好像它会给你返回一个Date对象,但它实际上会给你一个字符串 - 在你调用getMonth/getData/getFullYear之前,你需要将它转换成Date,this question的答案应该可以帮助你。

+0

是不是使用'var date = new Date(Y,m,d);'也不正确?据我了解,这是使用一个变量'Y',没有定义任何地方。 – 2014-10-30 09:04:05

+0

@CalvinScherle是的,它应该是小写的Y. – Scimonster 2014-10-30 09:04:29

+0

实际上,与之后声明的'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对象,如果你想读它的日期值到您的m1d1y1变量(目前为止,它们甚至从未被使用过)。