2013-09-30 135 views
0

假设有一个年龄变量和另一个年龄范围的变量。 我已经编写了此脚本来计算搜索之间的日期,但它并不总是计算正确的开始/结束日期。JavaScript:创建基于年龄的日期范围

  • 如果我是30岁及范围0使用,它工作正常 (与30岁以下的人)。
  • 如果我使用31岁和范围1,它可以正常工作(有人 30岁)。
  • 如果我使用30岁和范围1,它正常工作 (有30岁的人)。
  • 如果我使用30岁和范围5,它正常工作 (有30岁的人)。
  • 如果我使用年龄29和范围1,它不能正常工作 (不是30岁的人)。

所以它看起来有一个错误,我没有找到结束日期? 这里是我的脚本:

if (ageRange && (ageRange < 0 || ageRange > 20)) { 
    ageRange = 10; 
} 
if (age && age >= 18 && age <= 100) { 
    var now = new Date(); 
    var now2 = new Date(); 

    var startDate = new Date(now.setFullYear(now.getFullYear() - (age - ageRange))); 
    startDate.setHours(23); 
    startDate.setMinutes(59); 
    startDate.setSeconds(59); 

    var endDate = new Date(now2.setFullYear(now2.getFullYear() - (age + ageRange))); 
    endDate.setHours(0); 
    endDate.setMinutes(0); 
    endDate.setSeconds(0); 

    var findBirthObject = { $lte: startDate, $gte: endDate }; 
    if (ageRange == 0) { 
     startDate = new Date(startDate.valueOf() + 1000); 
     startDate.setFullYear(startDate.getFullYear() - 1); 

     findBirthObject = { $gte: startDate, $lte: endDate }; 
    } 

} 
+0

与'0'或'1'比较时总是使用“===”。检索生日的标记在哪里? – DevlshOne

回答

0

如果我是29岁和1范围内使用,它不能正常工作(不具有人与30岁以下)。

对于这种类型的范围检查使用modulus arithmetic。例如:

function ageCheck(age, ageRange) 
    { 
    if (age % 29 <= ageRange) { 
    return "In range" 
    } 

    else if (age % 29 === 29 - ageRange) { 
    return "In range" 
    } 

    else { 
    return "Out of range" 
    } 
} 

ageCheck(27,1) 
ageCheck(28,1) 
ageCheck(29,1) 
ageCheck(30,1) 
ageCheck(31,1) 
ageCheck(32,1)