比较当前日期和日期inp

时间:2014-10-30 09:00:01

标签: javascript

我想知道这段代码中的错误是什么。我想将今天的日期与用户输入日期进行比较

<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>

我觉得&#34; var r = document.getElementbyid(日期).value;&#34;这段代码不起作用

3 个答案:

答案 0 :(得分:1)

函数名称应为:

document.getElementById

(你错过了一些大写字母)

另外,你正在处理document.getElementById(dates).value的结果,好像它会给你一个Date对象,但它实际上会给你一个字符串 - 你需要在调用getMonth之前将它转换为Date getData / getFullYear就可以了 - this question的答案可以帮到你。

答案 1 :(得分:1)

我在下面的注释中列出了主要错误。

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

此外,还不完全清楚你要做什么。最后,假设您修复了这些语法错误,您有三个Date变量:

  • q,使用当前日期和时间创建。

  • date,它刚刚传递了q中的当前日期和时间。

  • mydate,其中也包含当前日期和时间,因为您刚刚传递了q传递给date的相同值。

因此,由于您要比较的两个日期对象被设置为相同的日期,因此您将始终警告“更大”(这不是更大,因为它们是相同的,但这是一个单独的问题)。

我也觉得很奇怪,这个验证函数在所有情况下都会返回false。由于你的if / else语句,没有办法返回true。对于应该验证某些东西的函数,验证总是返回false似乎很奇怪。

此外,正如@codebox在他的回答中所述,document.getElementById(dates).value只是返回一个字符串,如果您希望从中读取日期值,则必须将转换转换为新的Date对象它会显示在您的m1d1y1变量中(截至目前,它们从未使用过)。

答案 2 :(得分:0)

你有几个错字和逻辑错误。这段代码应该有用。

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