Проверка даты с помощью JavaScript - PullRequest
0 голосов
/ 08 мая 2009

Пожалуйста, помогите мне решить мою проблему. Я застрял с проблемой в 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 не работает

Что-то не так в этом? Пожалуйста, помогите мне... Заранее спасибо

Ответы [ 4 ]

3 голосов
/ 08 мая 2009

Я бы посоветовал вам полностью отказаться от этой дороги и уменьшить ваши головные боли, используя элементы управления, которые делают невозможным ввод неверных данных. Почему бы вам не использовать jQuery календарь для ввода. С двумя действительными датами ваш код проверки теперь будет ограничен проверкой того, является ли дата окончания более ранней, чем дата начала

1 голос
/ 08 мая 2009

Я предполагаю, что с вложенными if есть что-то не так.

[РЕДАКТИРОВАТЬ] Если это не так, рефакторинг кода. Переместите различные проверки в новые функции JavaScript. Это должно сделать код короче и проще для понимания. Старайтесь избегать дублирования любых проверок, даже если это замедляет работу JS - ваша основная задача - понять , а не оптимизировать код. Вы можете оптимизировать позже, если обнаружите, что код слишком медленный (чего не будет).

Затем создайте тесты, которые проверяют, что код действительно ведет себя так, как вы ожидаете. Вы можете использовать одну из множества JS-фреймворков или использовать небольшую хитрость: определите функцию, которая добавляет текст к элементу с идентификатором debug. В своем коде вызывайте эту функцию в разных местах с текущими значениями переменных и т. Д. Проверьте правильность значений.

Позже вы можете просто определить функцию как пустую или добавить return в качестве первой команды для ее отключения.

0 голосов
/ 24 июля 2011

Я использую метод даты jQuery UI для проверки дат, он отлично работает:

$. Datepicker.parseDate ('дд / мм / гг', '26 / 01/11 ');

вы можете использовать это с try / catch для определения проверки


(я знаю, что для этого нужен jQuery, и это не автономное решение, но я предлагаю это в качестве простой альтернативы)

0 голосов
/ 08 мая 2009

Я второе предложение Аарона по рефакторингу. Разобрав существующую большую функцию на более мелкие, было бы намного легче обнаружить ошибку.

Что касается проверки дат в JavaScript, вы можете найти это полезным:

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

На данный момент вы знаете, что пользователь указал правильную дату, и вы можете работать с переменной dateFromTxtBox для проверки других проверок (например, до / после определенной даты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...