WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:日付計算

0:[投稿] イトヤ [2005/11/25 17:55 ] [環境:Win IE Apache perl CGI]

いつも大変お世話になっております。
今回も何卒よろしくお願いいたします。

指定した日(たとえば2005年1月10日)から○○日前、○○日後(たとえば100日前、100日後)を求めようと思っています。

○○日後というのは標準のTime::Localを使用して2005年1月10日より100日後の場合は
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(timelocal(0,0,0,10,0,105) - 60 * 60 * 24 * 100);
を利用すればできるようなのですが、○○日前というのが計算できず困っています。
なんとか自分で組もうとすると、とても複雑なロジックになってしまいます。
何かよい方法などはありますでしょうか。
自分で組むしかない場合、ロジックなどのヒントをいただけないでしょうか。

また、○○日後の計算も、1970年より前や2038年よりも後は対応していないようなので(これは仕方がないのかもしれませんが)、もし他に方法がありましたらよろしくお願いいたします。


1:[完了] イトヤ [2005/11/25 18:08 ]

書き込んでから気づいたのですが、その反対をやればいいだけですよね…。
申し訳ありません、一応自己解決ということにしておきます。


2:[関連] イトヤ [2005/11/25 18:23 ]

何度も書き込みしてしまって申し訳ありません。
もし2038年よりも後を求めることのできる計算式やロジックのヒント等がありましたらよろしくお願いいたします。


3:[回答] B-Cus [2005/11/25 18:46 ]

Time::Local より:
 Please note, however, that the range of dates that can be actually be handled depends on the size of
 an integer (time_t) on a given platform. Currently, this is 32 bits for most systems, yielding an
 approximate range from Dec 1901 to Jan 2038.

というわけで、
 http://search.cpan.org/~bobo/Time-Local-Extended-0.48/Extended.pm
とか。


4:[回答] ふじ [2005/11/25 18:52 ]

日付を扱うモジュールが CPAN にいろいろあるので、
それらを試してみては?

例えば DateTime を使って

use DateTime;
$d = DateTime->new( year => 2005, month => 1, day => 10 );
$d->add( years => 100 ); # 100年後

とか。

DateTime はインストールが面倒ですけど、他にも
Date::Calc や Date::Simple というモジュールもあります。

回答(必須): 状態:

お名前(必須):

URL:




[戻る]