月の日数をチェックする方法

CGIテクニック集トップへ





概要

指定した月の日数をチェックします。30日、31日、28日、または29日なのかをチェックして指定が正しくなければエラーを返します。Date::Calcのcheckdateを使えばチェックが簡単にできますが、ここでは日数チェックのコードを紹介します。

必用な処理

  1. 年月日の値を受け取る
  2. 毎月の日数を設定する
  3. 指定月の日数を取得する
  4. 指定月がうるう年であるかをチェックし、2月の日数を適切に設定しなおす
  5. 受け取った年月日情報が指定された月の日数内であれば1、そうでなければ0を返す

サンプルコード

 sub monthdaycheck {
   my ($year,$month,$day) = @_;
   my @monthdays = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
   my $md = $monthdays[$month-1];
   ++$md if ($month == 2 and $year % 4 == 0 and ($year % 100 != 0 or $year % 400 == 0));
   return ($day <= $md and $day >= 1 and $year >= 1);
 }

コードの解説

 sub monthdaycheck {
   my ($year,$month,$day) = @_;

年月日情報をサブルーチンに受け取ります。

   my @monthdays = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

月の日数を配列に設定します。

   my $md = $monthdays[$month-1];

指定月の日数を取り出します。配列の要素は0から始まるので$monthから1を引いています。

   ++$md if ($month == 2 and $year % 4 == 0 and ($year % 100 != 0 or $year % 400 == 0));

指定年がうるう年の2月であれば28に1をプラスします。

   return ($day <= $md and $day >= 1 and $year >= 1);
 }

指定月の日がその日数内であれば1を返します。ここではそれ以外に日指定と年指定が1以上でないと0を返すようになっています。

関連するCGIテクニック

海外サーバーでの日本時間の表し方
カレンダーの作り方
Date::Calcを使ったカレンダーの作り方