日付に対して演算を施す。yyyy年mm月dd日のN日前とか、N日後といっ た計算をする。
Perl 5.005
システム時刻を取るのは簡単ですが、それをもとに「10日後は何月何 日?」というのを計算するのはあんがい大変です。
そこで、date_operateなる演算を考えてみました。こんな風に使います。
date_operate(\date, $operation, $days);
\dateはtime関数で得られた値と同形式のシステム時刻データであること。 また、リファレンスとしている。
$operationは、施す演算を指定する演算子。"+"または"-"のいずれ かであること。ただしこのバージョンでは演算子の検査をしていないの で、Perlの二項演算子ならなんでも食ってしまう。もちろんその場合の 結果は保証しない。
$daysは加減算する日数。正または負の整数であること……だが、こ れも検査はしていない。小数を与えてもそれなりに動く(ようである)。
1: sub date_operate 2: { 3: my($date, $op, $days) = @_; 4: my($exp, $val); 5: 6: $val = (60 * 60 * 24) * $days; 7: $exp = "\$\$date = \$\$date $op $val"; 8: eval $exp; 9: }
time関数の値が整数であることを利用して、その値に対して直接加減 算するようにしているのと、evalを使っているところがミソといえばミ ソ。
時刻データは別にリファレンスでなければならないことはありません (たぶん)。更新された時刻データを戻り値として返してあげればよいわ けです。
(2001.07.10)
(C) ©Copyright Noboru HIWAMATA (nulpleno). All rights reserved.