#!/usr/local/bin/perl # ↑環境によって変更してください。 # days[SSI version] # Copyright(c)1997-2000 IDA # # 上記の著作権表記を残す限り使用、改変は自由です。 # 1 2 3 4 5 6 7 8 9 10 11 12 @month =(0,31,28,31,30,31,30,31,31,30,31,30,31); #起算年月日を代入(適宜変更のこと) $yy = 1984; $mm = 7; $dd = 25; #現在の年月日を取得 $y = (localtime)[5] + 1900; $m = (localtime)[4] + 1; $d = (localtime)[3]; #起算年は閏年? if((($yy % 4 == 0) && ($yy % 100 != 0)) || ($yy % 400 == 0)){ $yyu = 1; } #対象年は閏年? if((($y % 4 == 0) && ($y % 100 != 0)) || ($y % 400 == 0)){ $yu = 1; } #エラー処理 #起算年月日が対象年月日より後? if($yy > $y){ &error(0); } if(($yy >= $y) && ($mm > $m)){ &error(1); } if(($yy >= $y) && ($mm > $m) && ($dd > $d)){ &error(2); } #起算年月日に数字以外の値はない? if($yy =~ /\D/){ &error(3)};if($mm =~ /\D/){ &error(3)}; if($dd =~ /\D/){ &error(3)}; #起算年月日のいずれかががnull? if(($yy eq '') && ($mm eq '') && ($dd eq '')){ &error(4);} #各月が1〜12の間? if(($mm < 1) || ($mm > 12)){ &error(5); } #各日数が範囲内?(閏年で2/29以外はerror) if(($yyu == 1) && ($mm == 2)){ if(($dd < 1) || ($dd > 29)){ &error(6); } } else { if(($dd < 1) || ($dd > @month[$mm])){ &error(7); } } #メイン処理 #起算年と対象年月日間の日数 if(($y != $yy) && (1 < $y - $yy)){ $total = ($y - $yy - 1) * 365; for($i = $yy + 1;$i < $y;$i++){ #閏年は一日多くする if((($i % 4 == 0) && ($i % 100 != 0)) || ($i % 400 == 0)){ $total++; } } } #起算年の日数の処理 #起算月日が2/29なら1日多くする if(($mm == 2) && ($dd == 29)){ $total++; } #起算月の日数 $total += @month[$mm] - $dd; #起算年の残りの月の日数 if($yy != $y){ $i = $mm + 1; while($i <= 12){ $total += @month[$i]; } continue { $i++; } } #起算年が閏年で2月以前で2/29じゃなけりゃ一日多くする if(($yyu == 1) && ($mm <= 2)){ if(!(($mm == 2) && ($dd == 29))){ $total++; } } #対象年月日の処理 #対象月 $total += $d; #対象月以前 if ($m > 1){ $i = 1; while($i < $m){ $total += @month[$i]; } continue { $i++; } } #対象年が閏年で対象月が3月以降 if(($yu == 1) && ($m >= 3)){ $total++; } #起算年と対象年が同じ if($yy == $y){ $total = 0; $total += @month[$mm] - $dd + $d; if(1 < ($m - $mm)){ $i = $mm; $i++; while($i < $m){ $total += @month[$i]; } continue { $i++; } } if(($yyu == 1) && ($mm <= 2) && ($m >=3)){ $total++; } } #起算年と対象年が同じでさらに月まで一緒 if(($yy == $y) && ($mm == $m)){ $total = $d - $dd; } print "$total"; exit(); sub error { $error = $_[0]; $word_0 = "起算年より対象年の方が大きい"; $word_1 = "起算月より対象月の方が大きい"; $word_2 = "起算月より対象日の方が大きい"; $word_3 = "数字以外の値があります"; $word_4 = "起算年の値が入力されていません"; $word_5 = "月は1〜12の間です"; $word_6 = "2月は1〜29日の間です"; $word_7 = "${mm}月は1〜@month[$mm]日の間です"; $word_8 = "${m}月は1〜@month[$m]日の間です"; print 'Error! - '; print $error==0 ? $word_0: $error==1 ? $word_1: $error==2 ? $word_2: $error==3 ? $word_3: $error==4 ? $word_4: $error==5 ? $word_5: $error==6 ? $word_6: $error==7 ? $word_7: $error==8 ? $word_8: exit(1); }