トップ > 多言語CGIダウンロード
自作関数の紹介
当サイト自作のCGIで使用している自作のPerl関数(サブルーチン)を公開します。役に立つものがあれば、ご自由に改造してお使いください。
指定の日付(文字列)から今日までの日数を算出する関数
年を跨いだときの計算が正しくないことが分かりましたので、修正しました。(2006/1/1)
この関数は文字列で構成された日付("YYYY.M.D")をもとにして、その日から今日までの日数を算出できます。
公式は「$days = &days("YYYY.M.D");」となる。
sub days{
(1)受け渡された日付("YYYY.M.D")を年($regyear)、月($regmonth)、日($regday)に分解する。
local ($regyear, $regmonth, $regday) = split( /\./, $_[0] );
(2)日数を代入する変数$daysを初期化する。
local $days = 0;
(3)現在時刻(ここでは日本時間=JST-9)を取得する。
$ENV{'TZ'} = "JST-9";
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$month = $mon + 1;
$year += 1900;
(4)今年が閏年かどうか判定(西暦年が4で割り切れれば閏年、よって2月は29日となる)し、各月の日数を配列@monに代入する。
if( ($year % 4) = = 0 ){
@mon = (31,29,31,30,31,30,31,31,30,31,30,31);
}else{
@mon = (31,28,31,30,31,30,31,31,30,31,30,31);
}
(5)現在の日($mday)から指定の日($regday)を引いた値を変数$dayに代入する。
$days = $mday - $regday;
(6)現在の月($month)が指定の月($regmonth)と異なる場合(すなわち同月ではない場合)、指定の月から前月までの日数を変数$daysの値に加算する。
if($month != $regmonth){
$m=$regmonth-1;
while($m!=$mon){
$days += $mon[$m];
if($m<12){$m++;}else{$m=0;$regyear++;}
}
}
(7)現在の年($year)が指定の年($regyear)より大きい場合(すなわち同年ではない場合)、指定の年から前年までの日数を変数$daysの値に加算する。
if($year > $regyear){
for($y=$regyear; $y<$year; $y++){
if( ($y % 4) = = 0 ){ $days += 366; } else { $days += 365; }
}
}
(8)求められた日数($days)を返す。
return $days;
}
©2006 北京紅楼通信