我正在使用此javascript检查输入的年龄是否超过18岁。
function calculateDiffYear(date, month, year)
{
var cur = new Date();
var diff = Math.floor((cur.getTime() - new Date(year, month, date)) / (60 * 60 * 24 * 1000));
diff -= Math.floor((cur.getFullYear() - year) / 4);
return diff / 365;
}
function checkBorn(sender)
{
var root = sender.form;
var date = root.elements['date'].value;
var month = root.elements['month'].value - 1;
var year = root.elements['year'].value;
if (!isValidDate(date, month, year) || calculateDiffYear(date, month, year) < 18) return false;
return true;
}
如果工作几乎是正确的,除非我们处于闰年,它给年龄超过18岁的人明天18岁,至少在我今天做的测试中日期并改为拉斯维加斯。我尝试添加这个,但没有运气:
if ($('#leap').val()) divider = 366;
else divider = 365;
return diff / divider;
你知道我怎么解决它?
谢谢
答案 0 :(得分:14)
如果我想测试特定日期是否超过18年,我会做这样的事情:
function meetsMinimumAge(birthDate, minAge) {
var tempDate = new Date(birthDate.getFullYear() + minAge, birthDate.getMonth(), birthDate.getDate());
return (tempDate <= new Date());
}
if (meetsMinimumAge(new Date(year, month, date), 18)) {
// is OK, do something
} else {
// too young - error
}
基本上,这需要提供生日,添加18,并检查是否仍然在今天或之前。
答案 1 :(得分:1)
我的年龄检查代码是这样的:
function checkAge(dateofbirth) {
var yd, md, dd, now = new Date();
yd = now.getUTCFullYear()-dateofbirth.getUTCFullYear();
md = now.getUTCMonth()-dateofbirth.getUTCMonth();
dd = now.getUTCDate()-dateofbirth.getUTCDate();
if( yd > 18) return true;
if( md > 0) return true;
return dd >= 0;
}
基本上,如果年差为19或更高,则必须超过18岁。
否则,如果当前月份超过出生月份,则为18个月和几个月。
否则,如果当天大于或等于出生日,则为18天和几天(或者是18岁生日)。
无论闰年如何,这都有效,并且比您当前的代码更有效。