入力日付を使用して配列から入力日付よりも前または等しい最も近い日付を取得するにはどうすればよいですか?
たとえば、私の配列は次のようになります。
@dates = ("200811","200905","200912","201005","201202");
そして私の入力日は
$inputdate = "201003";
「200912」である配列で最も近い日付を取得するにはどうすればよいですか。
日付の形式は YEARMM です。
ありがとう
入力日付を使用して配列から入力日付よりも前または等しい最も近い日付を取得するにはどうすればよいですか?
たとえば、私の配列は次のようになります。
@dates = ("200811","200905","200912","201005","201202");
そして私の入力日は
$inputdate = "201003";
「200912」である配列で最も近い日付を取得するにはどうすればよいですか。
日付の形式は YEARMM です。
ありがとう
日付を並べ替え、入力日付より前のものだけを選択し、最後の日付を取得します。
print ((grep $_ <= $inputdate, sort @dates)[-1]);
ここでのロジックは、月が 1 月の場合は 1 年さかのぼって 1 月から 12 月に月を変更し、それ以外の場合は同じ年の 1 か月前に戻ります。
私は Perl でコーディングすることはあまりありません。PHP でのコードは次のとおりです。
$dates = array("200811","200905","200912","201005","201202");
$inputdate = "201003";
$date = $inputdate;
while ($found==0) {
if (in_array($date, $dates)) {
$found = 1;
echo "the date is " . $date;
}
if ($date%100==1) { // if it's january, we need to change to december of the previous year
$date = $date - 100 + 12;
}
else {
$date = $date - 1; //go one month back in the same year
}
}