通过javascript验证日期

时间:2009-05-08 09:23:53

标签: javascript validation

请帮我解决我的问题。 我在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”验证,那么它是有效的,但如果我在验证日期之后把它,那么日期从工作和日期到不起作用

那有什么不对吗? 请帮我... 提前致谢

4 个答案:

答案 0 :(得分:3)

我建议你完全退出这条路,并通过使用无法输入无效数据的控制来减轻您的头痛。为什么不使用jQuery calendar作为输入。如果有两个有效日期,您的验证代码现在将仅限于检查结束日期是否早于开始日期

答案 1 :(得分:1)

我的猜测是嵌套的if有什么问题。

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

然后创建测试,验证代码实际上是否符合您的预期。您可以使用众多JS框架中的一个或使用一个小技巧:定义一个函数,该函数将文本添加到ID为debug的元素。在您的代码中,使用变量的当前值等在各个位置调用该函数。检查值是否正确。

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

答案 2 :(得分:0)

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

至于在JavaScript中验证日期,您可能会发现这有用:

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

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

答案 3 :(得分:0)

我使用jQuery UI日期方法验证日期,它完美运行:

  

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

您可以使用 try / catch 来确定验证


(我知道这需要jQuery,它不是一个独立的解决方案,但我提供这个作为一个简单的替代方案)