繁体   English   中英

通过javascript进行日期验证

[英]Date validation through javascript

请帮助我解决我的问题。 我在javascript中遇到了问题。 我的问题是我必须使用日期验证。 我有两个日期字段,并且我都在两个日期字段上进行了验证,但是问题是它正在一个日期字段上而不在另一个日期字段上工作。 喜欢:

JavaScript代码

function ValidateDate(DateFrom,DateTo)
{
  var SDate = document.checkbookrequest.txtDateFrom.value;
  var EDate = document.checkbookrequest.txtDateTo.value;
//variables for date from.
//In dob1 i am taking the date which the user is giving 
//and split it into mm/dd/yyyy to compare with current date
    var dob1=document.checkbookrequest.txtDateFrom.value;
    var arr1 = dob1.split("/");
    var m1= arr1[0];
    var d1 = arr1[1];
    var y1 = arr1[2];
//variables for date from.
//In dob i am taking the date which the user is giving 
//and split it into mm/dd/yyyy to compare with current date
    var dob=document.checkbookrequest.txtDateTo.value;
    var arr = dob.split("/");
    var m= arr[0];
    var d = arr[1];
    var y = arr[2];

//these variable for checking the datefiels should not be blank
    var endDate = new Date(EDate);
    var startDate= new Date(SDate);

    if(SDate != '' && EDate != '' && startDate > endDate)
    {

      alert(" Date To must be greater than or equal to Date From.");
      document.checkbookrequest.txtDateTo.value = "";
      document.checkbookrequest.txtDateTo.focus();
      return false;
    }
    else if(SDate == '')
    {
      alert("Please enter Date From");
      document.checkbookrequest.txtDateFrom.focus();
      return false;
    }
    else if(EDate == '')
    {
      alert("Please enter Date To");
      document.checkbookrequest.txtDateTo.focus();
      return false;
    }

//this is to chck the from date
    else if (EDate != "")
    {
      currentdate = new Date();
      a=currentdate.getMonth()+1;
      b=currentdate.getDate();
      c=currentdate.getFullYear();
      if((d==b)&&(m==a)&&(y==c))
    {
      alert('Please Enter valid Date Of Birth');
      return false;
    }
      else if ((d>b)&&(m==a)&&(y==c))
    {
      alert('Please Enter valid Date Of Birth');
      return false;
    }
    else if (y<=c-100)
    {
      alert('Please Enter valid Date Of Birth');
      return false;
    }
    else{
      document.checkbookrequest.cmd.value='btnSearch';
      document.checkbookrequest.submit();
    }
 }

//this is to chck the to date
    else if (SDate != "")
    {
      currentdate = new Date();
      a=currentdate.getMonth()+1;
      b=currentdate.getDate();
      c=currentdate.getFullYear();
      if((d1==b)&&(m1==a)&&(y1==c))
      {
        alert('Please Enter valid Date Of Birth in DateFrom');
        return false;
      }
      else if ((d1>b)&&(m1==a)&&(y1==c))
      {
        alert('Please Enter valid Date Of Birth in DateFrom');
        return false;
      }
      else if (y1<=c-100)
      {
        alert('Please Enter valid Date Of Birth in DateFrom');
        return false;
      }
      else{
       document.checkbookrequest.cmd.value='btnSearch';
       document.checkbookrequest.submit();
      }
    }


    else{
      document.checkbookrequest.cmd.value='btnSearch';
      document.checkbookrequest.submit();
    }        
  }

html代码

<td>Date From:<font color="red">*</font></td>
<td><input type="text" name="txtDateFrom" ></td>

<td>Date To:<font color="red">*</font></td>
<td><input type="text" name="txtDateTo"> </td>

<input type="button" name="btnSearch" value="Search" onclick="return ValidateDate(txtDateFrom,txtDateTo)" /></td>

如果我在上面放置了“ dateto”验证,则它正在工作,但如果我在date from的验证后放置了它,则date from在工作,而date to在工作

那有什么问题吗? 请帮助我...预先感谢

我建议您完全放弃这条路,并通过使用使您无法输入无效数据的控件来减轻您的头痛。 您为什么不使用jQuery日历进行输入。 有两个有效日期,您的验证码现在将被限制为检查结束日期是否早于开始日期

我的猜测是,嵌套的if出现了问题。

[EDIT]如果不是,请重构代码。 将各种检查移到新的JavaScript函数中。 这应该使代码更短,更容易理解。 尝试避免重复任何检查,即使这会使JS变慢-您的主要任务是理解而不是优化代码。 如果发现代码太慢(不会这样),则可以稍后进行优化。

然后创建测试以验证代码是否确实按照您期望的方式运行。 您可以使用许多JS框架之一,也可以使用一些技巧:定义一个函数,使用ID debug将文本添加到元素中。 在您的代码中,使用变量的当前值等在不同位置调用该函数。检查值是否正确。

以后,您可以简单地将函数定义为空,或者添加return作为禁用该函数的第一个命令。

我使用jQuery UI date方法来验证日期,它可以完美地工作:

$ .datepicker.parseDate('dd / mm / yy','26 / 01/11');

您可以将其与try / catch一起使用以确定验证


(我知道这需要jQuery,它不是一个独立的解决方案,但我提供了一个简单的选择)

我支持亚伦的重构建议。 通过将现有的大型功能分解为较小的单元,可以更轻松地找到错误。

至于在JavaScript中验证日期,您可能会发现以下帮助:

var dateFromTxtBox = new Date(document.getElementById('txtDateFld').value);
if (isNaN(dateFromTxtBox))
{
  alert('Invalid date entered in text box');
  return;
}

此时,您知道用户给了正确的日期,并且可以使用dateFromTxtBox变量来测试其他验证(例如,在特定日期之前/之后)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM