日付の存在チェック
指定した日付が存在するかをチェックする関数を作ってみます。引数は年・月・日の3つを取ります。
sub day_exists { my($year, $month, $day) = @_; my(@mlast) = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); if ($month < 1 || 12 < $month) { return 0; } if ($month == 2) { if ( (($year % 4 == 0) && ($year % 100 != 0)) || ($year % 400 == 0) ) { $mlast[1]++; } } if ($day < 1 || $mlast[$month-1] < $day) { return 0; } return 1; }
この関数を呼び出すときは
$result = day_exists($nen, $tsuki, $hi);のようにすると、$nen年$tsuki月$hi日が存在すれば$resultに1が、存在しなければ0が入ります。
また、調べたい日付が年、月、日に別れていない場合はsplitやsubstrを使用して分けて下さい。
# splitで分割する例 $date = '1999/12/04'; ($nen, $tsuki, $hi) = split('/', $date); $result = day_exists($nen, $tsuki, $hi); # substrで分割する例 $date = '19990608'; $nen = substr($date, 0, 4); $tsuki = substr($date, 4, 2); $hi = substr($date, 6, 2); $result = day_exists($nen, $tsuki, $hi);Date::Simpleモジュールを使って判定することもできます。
use Date::Simple; my @day = (2005, 2, 29); print join('/', @day); if (Date::Simple->new(@day)) { print " exists.\n"; } else { print " not exists.\n"; }
関連項目
・split関数・substr関数