Home > Logs > July 2007 > This Entry
その月の最後の日を返すサブルーチン
引数で年と月を渡すと、その月の最後の日を返すサブルーチンです。月ごとや日ごとの集計を、それぞれリンクさせたりする必要があるときに役立ちます。追加モジュールとか使えばもっと簡単なのかもしれないけど、できるだけ標準モジュールを使って、環境に依存しないソースコードを書くためのもの。
# 年と月から最後の日を返す
sub last_day_of_month {
my ($year, $month) = @_;
# うるう年を考えない場合の、月の最終日のリスト
my @lastday = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
# 月が1から12でないならこの時点でゼロを返す
if ($month < 1 || 12 < $month) {
return 0;
}
# 2月の場合、閏年であれば日数を増やす
if ($month == 2) {
if ( (($year % 4 == 0) && ($year % 100 != 0)) || ($year % 400 == 0) ) {
$lastday[1]++;
}
}
# 月の最終日のリストのうち、必要なものを返す
return $lastday[$month - 1];
}
閏年については、西暦が4の倍数の年であれば2月の日数を1日増やしますが、西暦が4の倍数の年でも100の倍数の年は閏年にならないので除外します。また西暦が100の倍数の年でも、400の倍数の年の場合は閏年になるので、この場合は2月の日数を1日増やします。
引数の渡し方は、以下のような感じ。この場合print関数が「31」を出力します。
my $last_day = &last_day_of_month(2007, 07); print $last_day;
Post Comment