Я использую этот JavaScript, чтобы проверить, если возраст Введенный старше 18.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;
Вы знаете, как я могу его решить?
Спасибо
Год на самом деле 365.25 дней, поэтому нам нужны високосные годы в первую очередь. Использует ли 365.25 вместо 365 исправить свою математику? – Sparky
@ Sparky672: На самом деле год составляет 365,24 дней. Вот почему каждые 400 лет у нас нет високосного года. –
Деление на 365.24 (или .25) терпит неудачу, так как оно дает менее 18 для тех, кто становится 18 сегодня или даже 2 дня назад, я попробую решение @nnnnnn сейчас ... –