日付を指定すると、その日付が存在する日付かをチェックします。メールフォームやアンケートなど日付を指定させる場合のチェックに使ってください。主に、月末日のチェックに使います。たとえば、2 月 なのに 30 日が指定されたり、6 月なのに 31 日が指定された場合のチェックに役立ちます。

■ サブルーチン名

DateExists

■ 引数

評価したい日付を西暦、月、日に分けて指定します。

  1. 西暦(1970 〜 2023)
  2. 月(1 〜 12)
  3. 日(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;
}

戻る

会社案内 | 特定商取引法に基づく表示 | プライバシーポリシー | 当サイトへのリンクについて | お問い合わせ