ある日から15日先(または前)の日付を計算するなどしたいが、どうすれば良いだろうか? time値が分かっていれば簡単に求めることが出来るが、それが全く分からない。
今回はDate::Simpleを使った解法を示すことにする。以下のプログラムの実行には、Date::Simpleモジュールのインストールが必要となっている。
サンプル
;# ;#X日後(前)の日付を求める ;# use Date::Simple; #-- 計算元の日付 --# my ($yyyy, $mm, $dd) = (2006, 12, 31); #-- 加算(減算)する値 --# my $plus = 5; #-- 計算 --# $result = calDate($yyyy, $mm, $dd, 5); print $result; #----------------------------------# #日付の演算を行う #----------------------------------# sub calDate{ my $yyyy = shift; my $mm = shift; my $dd = shift; my $plus = shift; #演算 my $date = Date::Simple::ymd($yyyy, $mm, $dd); my $result = $date + $plus; #戻す return( wantarray? ($date->year, $date->month, $date->day):$result ); }
実行結果
2007-01-05
上記のcalDate関数では、関数の呼び出し元がリスト(配列など)を求めている場合は、年・月・日をそれぞれ返し、スカラーの場合は実行結果のような文字列を返す。
その他の処理
もっと簡単に演算
例えば次のようなコードを書くと、日付と日付の間に何日あるかを調べることができる。
use Date::Simple; print date('2001-08-27') - date('1977-10-05');
※動作しない場合は「Date::Simple::date('2001-08-27')
」などとパッケージ名も指定する。
初期化について
例ではymdを使用しているが、次のような初期化(オブジェクトの生成、取得)を行うことも可能だ。
use Date::Simple; my $date = Date::Simple->new('1972-01-17');
曜日の取得
曜日の取得はday_of_weekメソッドを呼び出すことで可能。
use Date::Simple; my $date = Date::Simple->new('1979-10-05'); my $youbi = $date->day_of_week; print (('日','月','火','水','木','金','土')[$youbi]);
その他詳しいことはドキュメントを参照されたい。