【问题标题】:JavaScript: Create age based date rangesJavaScript:创建基于年龄的日期范围
【发布时间】:2013-10-06 23:34:38
【问题描述】:

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

  • 如果我使用年龄 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”或“1”进行比较时始终使用“===”。检索生日的标记在哪里?

标签: javascript algorithm debugging date-range


【解决方案1】:

如果我使用 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) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    相关资源
    最近更新 更多