我的html表单中有一个出生日期字段如下:
Date of Birth
<input type="date" name="dob" id="dob" onchange="ageCalculation()">
在年龄计算功能中,我想拒绝未来的日期,年龄不应超过8年.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 ;}
}
但是我得到了Uncaught TypeError:birthDate.after不是函数
在我的htnl表格的开头,我写了
<%@ page import="java.util.Date"%>
答案 0 :(得分:1)
而不是仅仅使用&#34;&lt;&#34;之后的比较。另外我修改了你的if子句。
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 ;
}
}
&#13;
<input type="date" name="dob" id="dob" onchange="ageCalculation()">
<input id="age"></input>
&#13;
答案 1 :(得分: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>