2016-08-29 3 views
0

JSP У меня есть дата рождения поля в моей HTML форме следующим образом:Отклонить будущие даты в

Date of Birth 
<input type="date" name="dob" id="dob" onchange="ageCalculation()"> 

В функции agecalculation я хочу, чтобы отклонить будущие даты, а также возраст не должен быть больше, чем 8 years.The Javascript является:

function ageCalculation(){ 

     var currentDate = new Date(); 
    var birthDate = new Date(document.getElementById("dob").value); 
    var difference = currentDate - birthDate; 

    var differenceInYears = Math.floor(difference/(1000 * 60 * 60 * 24 * 365.25)); 
    if(birthDate.after(currentDate)|| differenceInYears>8) 
     { 
     window.alert("Age should be less than 8 years"); 
     } 
    else{ 
    document.getElementById("age").value = differenceInYears ;} 

     } 

Однако я получаю неперехваченный TypeError: birthDate.after не является функция

в начале моей формы htnl я написал

<%@ page import="java.util.Date"%> 
+0

Я бы рекомендовал использовать [moment.js] (http://momentjs.com). 'Момент (BirthDate) <момент() минус (8, 'лет')' – str

ответ

1

Вместо этого просто используйте сравнение с "<". Кроме того, я изменил ваш if-clause.

function ageCalculation(){ 
 

 
    var currentDate = new Date(); 
 
    var val = document.getElementById("dob").value; 
 
    var birthDate = new Date(val); 
 
    var difference = currentDate - birthDate; 
 
    
 
    var differenceInYears = Math.floor(difference/(1000 * 60 * 60 * 24 * 365.25)); 
 
    if(birthDate > currentDate) { 
 
    window.alert("You cannot be born in the future"); 
 
    } else if(differenceInYears>8) { 
 
    window.alert("Age should be less than 8 years"); 
 
    } else { 
 
    document.getElementById("age").value = differenceInYears ; 
 
    } 
 
}
<input type="date" name="dob" id="dob" onchange="ageCalculation()"> 
 
<input id="age"></input>

+0

Эй ... Это работает ... Спасибо u :-) –

+0

Добро пожаловать. Пожалуйста, проверьте мой пост как ответ ;-) –

0

У вас есть несколько вопросов, во-первых, не все браузеры в использование поддержки даты ввода типа, так что вы должны проверить значение, которое возвращается. Вы также должны указать формат вводимой даты (в этом случае - yyyy-mm-dd). В тех случаях, когда браузеры поддерживают ввод даты, возвращаемое значение будет соответствовать дате ISO 8601, например, 2016-08-30.

Еще одна проблема заключается в том, что если вы используете конструктор Date для синтаксического анализа строки (или используете Date.parse, они эквивалентны для синтаксического анализа), это будет рассматриваться как UTC. При использовании эффектов часовых поясов можно создать дату, отличающуюся от даты. Это повлияет только на даты перекрытия часового пояса, но в определенные дни это будет раздражать в течение определенного времени.

Таким образом, вам необходимо проверить, являются ли значения фактическими значениями даты и разбор строки как локальные. Вы можете сделать расчет по возрасту очень просто, добавив 8 лет к дате рождения и увидев, если это произойдет после сегодняшнего дня. Если это так, человеку еще нет 8. В противном случае, они есть.

/* Check if birth date is more than 8 years 
 
** ago. Result is written to form.result 
 
** @param {DOMElement} el - form control 
 
*/ 
 
function checkAge(el) { 
 
    var dateString = el.form.birthDate.value; 
 
    var d = parseISOLocal(dateString); 
 
    var result; 
 

 
    // Check date was valid 
 
    if (isNaN(d)) { 
 
    result = 'Invalid date'; 
 

 
    // Add 8 years to provided date and check if on or before today 
 
    } else { 
 
    d.setFullYear(d.getFullYear() + 8); 
 
    if (d <= new Date()) { 
 
     result = '8 years or older'; 
 
    } else { 
 
     result = 'Under 8 years old'; 
 
    } 
 
    } 
 
    el.form.result.value = result; 
 
} 
 

 
/* Parse ISO 8601 format date as local 
 
** @param {string} s - date string in format yyyy-mm-dd 
 
** @returns {Date} from parsing string as a 
 
** local date. If date has invalid values, 
 
** an invalid Date is returned 
 
*/ 
 
function parseISOLocal(s) { 
 
    var b = s.split(/\D/); 
 
    var d = new Date(b[0], --b[1], b[2]); 
 
    return d && d.getMonth() == b[1]? d : new Date(NaN); 
 
}
<form onsubmit="return false"> 
 
    Enter birthday (yyyy-mm-dd)<input type="date" name="birthDate" value="2008-08-31"><br> 
 
    <input type="button" onclick="checkAge(this)" value="Check 8 or over"> 
 
    <input type="text" readonly name="result"> 
 
</form> 
 

Смежные вопросы