我正在编写一些小代码,以检查一个人是否有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
,因为它今天。我在某个地方犯了一个错误,但是我没有看到它,有什么可以帮助我吗?
答案 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 强>