日付を比較・評価する - Date::Simple
ある日付(指定日)から本日までが1週間が経過しているかどうかを確認したい。指定日で使用されるのは「月日(MMDD)」のみの値という条件。年をまたぐことを考慮して、どう比較・評価すればいいのかを考えてみた。
とりあえず比較してみる
日付データはCPANのModule、Date::Simpleを使って生成。
- 指定日オブジェクトに本日が属する年(YYYY)を付加する。(日付オブジェクトはYYYYを意識するので)
- 本日(YYYY-MM-DD)と指定日を比較し、指定日が大きければ未来としてNGとする。
- 本日と指定日の差が7日以内かどうかを評価する。
という感じでやってみる。
DateSimple.pl
#!/usr/bin/perl use strict; use warnings; use Date::Simple qw(date today); my $input_date = $ARGV[0] || die("No parameter!\n"); #実行時に受け取る my $today = today(); #今日の日付オブジェクトを生成 my $target_date = date($today->year . $input_date); #仮で指定日にYYYYを設定しオブジェクトを生成(1) my $diff = $today - $target_date; #二つの日付の差分を取る print "Today is $today, target date is $target_date and diff is $diff \n"; if($today < $target_date){ #(2) print "Target date is future!\n"; }else{ if($diff < 7){ #(3) print "Compare is OK! (within 7 days)\n"; }else{ print "Compare is NG! (over 7 days)\n"; } } exit;
実行時に引数で指定日を渡すようにする。今日が6月4日だと仮定。
「6月5日」を指定。
% perl DateSimple.pl 0605 Today is 2009-06-04, target date is 2009-06-06 and diff -1 Date that you setted is future!
「6月1日」を指定。
% perl DateSimple.pl 0601 Today is 2009-06-04, target date is 2009-06-01 and diff is 3 Compare is OK!
「5月27日」を指定。
% perl DateSimple.pl 0528 Today is 2009-06-04, target date is 2009-05-27 and diff is 8 Compare is NG! (over 7 days)
問題点
しかしながら上記だと年を越えての比較が出来ない。
my $today = date('2009-01-01'); #強制指定
この場合に引数で指定日を12月20日とした場合、ヘンテコな結果になってしまう。YYYYを意識しないで、単純にMM-DDの間隔を比較できればいいんだけれど・・・さてどうしたもんかな。(継続検討中)