比较当前日期和日期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>

我觉得"var r=document.getElementbyid(dates).value;"这段代码在上不起作用

函数名称应为:

document.getElementById

(你漏掉了一些大写字母)

此外,您将document.getElementById(dates).value的结果视为它将返回一个Date对象,但它实际上会返回一个字符串-您需要将其转换为Date,然后才能对其调用getMonth/getData/getFullYear-这个问题的答案应该会对您有所帮助。

我在代码中主要错误的地方放了注释。

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只是返回一个字符串,如果您希望将其中的日期值读取到m1d1y1变量中(到目前为止,这些变量从未使用过),则必须将其转换为新的Date对象。

您有几个打字错误和逻辑错误。这个代码应该可以工作。

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

最新更新