[Edit][Create New]
[ IndexPage / ネットとプログラミング / CGI / 便利なスクリプト片(未整理) / isValidDate.pl ]

isValidDate.pl

sub isValidDate{
	local($year, $mon, $day) =@_;
	# $year 4桁の西暦
	# $mon  月を表す1〜12の整数
	# $day  日付

	# 簡単なチェック
	return 0 if $year < 1701 # 英では1700年は閏年。
			 || $year > 9999 # まあここは適当に。
			 || $day  <	1
			 || $day  >   31;
	# $monは間違っていたら以下の$lastdayが0になるのでチェック不要。

	# その月の末日を計算(2行目は閏年の計算)
	local($lastday) = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$mon - 1]
		 + ($mon == 2 && ($year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0
));
	# $day が $lastday 以下ならOK。
	($day <= $lastday) ? 1 : 0;
}