日付を指定すると、その日付が存在する日付かをチェックします。メールフォームやアンケートなど日付を指定させる場合のチェックに使ってください。主に、月末日のチェックに使います。たとえば、2 月 なのに 30 日が指定されたり、6 月なのに 31 日が指定された場合のチェックに役立ちます。
■ サブルーチン名
DateExists
■ 引数
評価したい日付を西暦、月、日に分けて指定します。
- 西暦(1970 〜 2023)
- 月(1 〜 12)
- 日(1 〜 31)
■ 戻値
指定日が存在すれば「1」が、存在しなければ「0」が返ります。
■ 使い方
まず、このサブルーチンを使うスクリプトのはじめのほうに、
use Time::Local; を記述してください。お使いのサーバに、Perl モジュール Time がインストールされていないと、このサブルーチンはご利用いただけませんので、ご注意さい。Perl モジュール Time は、Perl5 の標準モジュールですので、ほとんどのサーバでご利用いただけるはずです。
さて、西暦 2002 年 2 月 30 日という日付を評価する場合には、
$year = 2002;
$month = 2;
$day = 30;
$exist = &DateExists($year, $month, $day);とします。西暦 2002 年 2 月 30 日は存在しない日付ですので、$exist には 0 が与えられます。結果を $exist のようなスカラー変数に格納せずに、直接、以下のように if 文や unless 文の評価式で使うこともできます。
unless(&DateExists($year, $month, $day)) {
#エラー処理
}
■ サブルーチン
sub DateExists {
my($year, $mon, $day) = @_;
eval {timelocal(0, 0, 0, $day, $mon-1, $year-1900);};
if($@) {return "0";}
if($mon == 12) {$mon = 0;}
my $time = timelocal(0, 0, 0, 1, $mon, $year-1900);
$time -= 60*60*24;
my @date = localtime($time);
if($day > $date[3]) {return 0;}
return 1;
}
|