• ベストアンサー

2つの日付・時間の差分を求めるには

2つの日付、時間の差分を求めるには、 timelocal を使うのかと思うのですが、 $time1 = timelocal($sec1,$min1,$hours1,$day1,$month1,$year1); $time2 = timelocal($sec2,$min2,$hours2,$day2,$month2,$year2); $result = int(($time2 - $time1)/(60*60*24)); return $result; ではいけないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

経過日数を求めるのですよね。 問題ないと思います。 問題があるとすると、1970年以降の日付じゃないとだめだということですね。 Date::Calc モジュールを使うと時刻計算で楽できます。 use Date::Calc qw(Delta_Days); #monthは、Date::Calcは、1始まり #西暦は1から使える $d = Delta_Days($year1,$month1,$day1, $year2,$month2,$day2); print "$d日経過しました\n";

alx
質問者

お礼

回答ありがとうございます。 やってみます。

その他の回答 (2)

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.3

ちなみにtimelocalに入れる時は月は-1しないとダメです。 (1月→0 2月→1 ・・・ 12月→11) -1しなくても1月から11月までなら問題なく動いているように見えますが、12月になると0~11の範囲外になるのでTime::Localに怒られます。

alx
質問者

お礼

ありがとうございます。 うっかり忘れてました。

  • SE-1
  • ベストアンサー率57% (26/45)
回答No.1

以下のサイトの「経過日数を求める」がご参考になると思います。

参考URL:
http://cocohome.hp.infoseek.co.jp/cocohome/l_nisukeisan.html
alx
質問者

お礼

参考になるサイトをご紹介いただき、ありがとうございます。