1

我正在使用这个 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 岁,至少在我正在使用今天日期和更改为 las 年的测试中。我尝试添加这个但没有运气:

if ($('#leap').val()) divider = 366;
else divider = 365;

return diff / divider;

你知道我该如何解决吗?

谢谢

4

3 回答 3

15

如果我想测试某个特定日期是否超过 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 添加到它,并检查它是否仍在今天或之前。

于 2012-02-22T06:09:23.393 回答
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 岁生日)。

无论闰年如何,这都有效,并且比您当前的代码更有效。

于 2012-02-22T06:07:11.303 回答
0

您可以使用moment.js来验证它:

var yourDate = year.toString() + "/" + month.toString() + "/" day.toString();

var date = moment(yourDate, "YYYY/MM/DD"); // There are other formats!
var years = moment().diff(date, 'years', false);

if(years >= 18){
    return true;
}

return false;
于 2018-05-11T04:35:23.537 回答