如果一个人年龄超过18岁或根据生日有18岁,则进行验证

时间:2014-09-09 15:44:02

标签: javascript jquery

我正在编写一些小代码,以检查一个人是否有18岁或更长时间给她/他的生日。这就是我现在所做的:

function validateAge(birthday, minage, separator) {
    if (!parseInt(minage)) {
        return false;
    }

    var $split = birthday.split(separator);

    var $dateFullYear = $split[2];
    var $dateMonth = $split[1];
    var $dateDay = $split[0];

    var $tempDate = new Date($dateFullYear + minage, $dateMonth, $dateDay);

    if ($tempDate <= new Date()) {
        return true;
    } else {
        return false;
    }

    return false;

}

但是我总是给出一个有效的响应,例如,如果我用这个参数调用函数:validateAge('09/09/2014', 18, '/')它应该返回false,因为它今天。我在某个地方犯了一个错误,但是我没有看到它,有什么可以帮助我吗?

5 个答案:

答案 0 :(得分:3)

您应该像这样解析split语句并从月中减去一个(从零开始):

var $dateFullYear = parseInt($split[2],10);
var $dateMonth = parseInt($split[1],10)-1;
var $dateDay = parseInt($split[0],10);

答案 1 :(得分:1)

月份需要从零开始。

new Date(2014, 9, 9) // Thu Oct 09 2014 00:00:00 GMT-0600 (MDT)

您可能希望月份9为9月,但实际上是10月份,因为1月份为0.这样就无法进行比较。

答案 2 :(得分:1)

让我们看一个例子:

validateAge('09/09/1990', 18, '/')

在这种情况下,您的代码将执行此操作:

var $tempDate = new Date('1990' + 18, '09', '09');

相同
var $tempDate = new Date(199018, 9, 9);

这个问题可以通过解析birthday

的部分来解决
var $dateFullYear = parseInt($split[2]);
var $dateMonth = parseInt($split[1]) - 1; // months are zero based
var $dateDay = parseInt($split[0]);

答案 3 :(得分:0)

您需要将$dateFullYear包裹在parseInt中 - 它试图将字符串和整数一起添加并给出错误的日期。

var $tempDate = new Date(parseInt($dateFullYear, 10) + minage, $dateMonth, $dateDay);

答案 4 :(得分:0)

您可以尝试按如下方式重写您的功能,其中月份为零:

function validateAge(birthday, minage, separator) {
    if (!parseInt(minage)) {
        return false;
    }
    var split = birthday.split(separator);
    var dateFullYear = split[2];
    var dateMonth = split[1];
    var dateDay = split[0];
    var mydate = new Date();

    mydate.setFullYear(dateFullYear, dateMonth-1, dateDay);

    var currdate = new Date();
    var setDate = new Date();         
    setDate.setFullYear(mydate.getFullYear() + minage, dateMonth-1, dateDay);

    return (currdate - setDate) > 0;

}

var valid = validateAge('09/09/2014', 18, '/');
console.log(valid); // false

<强> JSFiddle