0

1 つの年齢変数と、年齢の範囲用の別の変数があるとします。検索対象の日付を計算するようにこのスクリプトを既にプログラムしましたが、常に正しい開始日/終了日を計算するとは限りません。

  • 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 };
    }

}
4

1 に答える 1

0

29 歳で範囲 1 として使用すると、正しく機能しません (30 歳の人はいません)。

このタイプの範囲チェックにはモジュラス算術を使用します。例えば:

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) 
于 2014-02-13T00:22:02.490 に答える