BLOG

Go to top


その月の最後の日を返すサブルーチン

July 25, 2007 11:30 PM

引数で年と月を渡すと、その月の最後の日を返すサブルーチンです。月ごとや日ごとの集計を、それぞれリンクさせたりする必要があるときに役立ちます。追加モジュールとか使えばもっと簡単なのかもしれないけど、できるだけ標準モジュールを使って、環境に依存しないソースコードを書くためのもの。

# 年と月から最後の日を返す
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;

Comments


Contact me

Copyright © 2005 - 2017 okayama All rights reserved.