2014-01-13 4 views
1

У меня есть HTML-форма с элементом «Дата» и кнопка отправки. Есть 2 функции. Один из них - для расчета возраста с даты рождения в элементе HTML «date». Другая функция заключается в сравнении возраста с минимально допустимым возрастом. Мне нужна помощь для его завершения. См. Мои вопросы в комментариях в коде. Да, я видел другие подобные вопросы. Я хотел бы узнать, а не просто скопировать/вставить. Если я понимаю, что не так с моим кодом/синтаксисом, то я узнаю лучше. Заранее спасибо.Вычислить возраст от элемента «Дата» HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
</head> 
<body> 
<script type="text/javascript"> 

    var minAge = 18; 

    var curDate = new Date(); 

    var curr_year = curDate.getFullYear(); 
    var curr_month = curDate.getMonth(); 


    //Calculates age from given Birth Date in the form// 
    function _calcAge() { 

     var dt1 = document.getElementById('date').value; 
     var birth_date = new Date(dt1); 

     var birth_year = birth_date.getFullYear(); 
     var birth_month = birth_date.getMonth(); 
     var calc_year = curr_year - birth_year; 
     var calc_month = curr_month - birth_month; 

     //The following below is what I am not sure about. 
     //I need to combine years and months and 
     //convert them into a string??? Is this syntax dead wrong? 

    var final_result = (calc_year && "." && calc_month).toString(); 

     // final result should be a number with a decimal point, example: 35.5 
     final_result = parseFloat; 

     return (final_result); 
     alert(final_result); 
    } 

    //Compares calculated age with minimum age and acts according to rules// 
    function _setAge() { 

     var age = _calcAge(); 
     //alert("my age is " + age); 
     if (age < minAge) { 
      alert("You are not allowed into the site. The minimum age is 18!"); 
     } else 

      alert("Welcome to my Site"); 
      window.open(main.htm, _self); 

    } 


    </script> 

    <form> 
     Date Of Birth: <input type="date" name="date of birth" id="date" /> 
     <input type="submit" name="submit" id="submit" onClick="_setAge();" /> 

    </form> 

    </body> 
    </html> 

ответ

0

мне удалось заставить его работать. Кредит также идет в https://stackoverflow.com/users/444991/matt для части я одолжил у него здесь: https://stackoverflow.com/a/4076440/3189118

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title></title> 
    </head> 
    <body> 
     <script type="text/javascript"> 

     var minAge = 18; 
     var today = new Date() 
     //Calculates age from given Birth Date in the form// 
     function _calcAge(birthDate, givenDate) { 
     givenDate = new Date(today); 
     var dt1 = document.getElementById('date').value; 
     var birthDate = new Date(dt1); 
     var years = (givenDate.getFullYear() - birthDate.getFullYear()); 

     if (givenDate.getMonth() < birthDate.getMonth() || 
    givenDate.getMonth() == birthDate.getMonth() && givenDate.getDate() < birthDate.getDate()) { 
      years--; 
     } 

     return years; 
    } 

    //Compares calculated age with minimum age and acts according to rules// 
    function _setAge() { 

     var age = _calcAge(); 
     if (age < minAge) { 
      alert("You are not allowed into the site. The minimum age is 18!"); 
     } else 

      alert("Welcome to my Site"); 


    } 


</script> 

<form> 
    Date Of Birth: <input type="date" name="date of birth" id="date" /> 
    <input type="submit" name="submit" id="submit" onClick="_setAge();" /> 

</form> 

2

Вы можете добавить или вычесть даты javascript по элементарным математическим функциям.

Просто сделайте новую дату на сегодня var Today = new Date(), а затем вычтите дату из формы. Вы получаете разницу в миллисекундах.

Теперь вам просто нужно конвертировать их в года/месяцы путем деления их на (1000*60*60*24*365)

Так просто сделать:

var difference = (curDate - birth_date)/((1000*60*60*24*365); 
var differenceString = "The difference is: " + difference.toFixed(1) + " years."; 

В toFixed(1); возвращает свой номер с 1 десятичной точкой.

И всегда помните JavaScripts Даты Месяцы основаны на нуле.

Ваша вторая функция также должна работать.

Here is a working fiddle

+0

Спасибо, но ... Если мы сделаем это по-своему (и это выглядит хорошо), как мы учитываем годы, которые имеют 366 дней? Не могу ли я каким-либо образом использовать встроенную функциональность элемента «date» для учета всего этого? –

+1

Вычитание автоматически вычитает 366 дней, если есть годы с 366. С округлением до 1 десятичной точки вы покрываете 0,1 * 365, а 36,5 дней допуск так, как +/- 18 дней ... вероятность того, что там не будет у вас есть возраст выше 4 * 18 дней, пока один десятичный знак может быть ошибочным на 1, я думаю. Могу не накрывать действительно каждый случай, но достаточно точный, я думаю. Если результат правильный или неправильный, зависит от того, как вы определяете год. Если год, который вы вычисляете, определяется с 365 днями, как это. – Igle

2

Это будет работать, вы можете просто заменить код этого

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
</head> 
<body> 
    <script type="text/javascript"> 

     var minAge = 18; 
     function _calcAge() { 
      var date = new Date(document.getElementById("date").value); 
      var today = new Date(); 

      var timeDiff = Math.abs(today.getTime() - date.getTime()); 
      var age1 = Math.ceil(timeDiff/(1000 * 3600 * 24))/365; 
      return age1; 
     } 
     //Compares calculated age with minimum age and acts according to rules// 
     function _setAge() { 

      var age = _calcAge(); 
      //alert("my age is " + age); 
      if (age < minAge) { 
       alert("You are not allowed into the site. The minimum age is 18!"); 
      } else 

       alert("Welcome to my Site"); 
      window.open(main.htm, _self); 

     } 


    </script> 
    <form> 
    Date Of Birth: 
    <input type="date" name="date of birth" id="date" /> 
    <input type="submit" name="submit" id="submit" onclick="_setAge();" /> 
    </form> 
</body> 
</html> 
Смежные вопросы