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 歳以上を与えます。少なくとも、今日の日付で実行し、昨年に変更するテストでは. これを追加しようとしましたが、運がありません:

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 に答える