ロジカルに考えるとはこういうことか
昨日に引続きPerl。あのままでは年またぎでうまく比較できないので、ちょっと考え方を変えてみた。
- 未来の日付は基本あり得ない(想定しないもの)とする
- もし未来の日付だったら過去と見なし、YYYYを一年前の値を再セット
- その上で本日と比較して差分をみる
という方向性で改修してみる。
DateSimple2.pl
#!/usr/bin/perl use strict; use warnings; use Date::Simple qw(date today); my $input_date = $ARGV[0] or die("No parameter!\n"); my $today = today(); my $target_date = date($today->year . $input_date) or die("Object didn't create!"); if($today < $target_date){ #(1)未来は想定しない print "$target_date is future date!(set: year - 1)\n"; $target_date = date($today->year -1 . $input_date); #(2)1年前のYYYYをセット } my $diff = $today - $target_date; print "Today is $today, target date is $target_date and diff is $diff \n", "Compare is ", $diff < 7 ? "OK! (within 1 week)\n" : "NG! (over 1 week)\n"; #(3)再度比較 exit;
仮に今日が1月1日で
my $today = date('20090101');
指定日が12月28日だとしても
% perl DateSimple.pl 1228 2009-12-28 is future date!(set: year - 1) Today is 2009-01-01, target date is 2008-12-28 and diff is 4 Compare is OK! (within 1 week)
「みなし」で正確に比較してくれる。今度こそうまくいったかな?
処理自体は単純明快なんだけど、観点を変えることで解決できるものなんだ。本当にわずかだけど、ロジカル(論理的)な思考ってこういう事の積み重ねなのかなーと感じられて、感動。