- ベストアンサー
日付の差を求める関数はないでしょうか。
日付の差を求める関数はないでしょうか。 SQLのDATEDIFFのような単純明快な関数があればいいなぁと思っています。 できれば、Perlの組み込み関数か、標準モジュールで・・・x_x
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
標準モジュールTime::Localに含まれるtimelocal()を使うと、自作サブルーチンで簡単に実現できます。 timelocal()は組み込み関数localtime()の逆関数です。年月日時分秒からエポック秒(1900/01/01 00:00:00 GMTからの秒数)を求めることができます。 use Time::Local; sub date_diff { my($year1, $mon1, $mday1, $year2, $mon2, $mday2) = @_; return((timelocal(0, 0, 0, $mday2, $mon2 - 1, $year2 - 1900) - timelocal(0, 0, 0, $mday1, $mon1 - 1, $year1 - 1900)) / (24 * 60 * 60)); } print date_diff(2000, 1, 1, 2010, 6, 24); # 2000/01/01から2010/06/24までの日数差
その他の回答 (2)
- tsuduki123
- ベストアンサー率32% (21/65)
よくわからないけれど、普通にPOSIX:difftimeじゃだめなのですか? POSIX:mktimeとあわせれば出来そうな予感がしますけど
お礼
こんばんは だめではありません。 知らないだけです^^; mktimeはNo.2 N60-BASICさんが教えてくれたtimelocalほとんど同じ機能ですね! したがってdifftimeは使わずにN60-BASICさんのサブルーチンをmktimeに置き換えるだけで行けますね! しかし今回は、より身近なtimelocalで組もうと思います。 今回というより次回かな・・・^^
- guci-ok
- ベストアンサー率33% (49/146)
標準ではないですが、CPANモジュールならあります。 Date::Calc
お礼
こんばんは! やはり標準では、なさそうですね。 でも、無いことが分かってスッキリしました。 さて、悩んだあげく、私がとった方針は・・・ モジュールは入れずに、DBに接続してSQLでDATEDIFFを使うことにしました。 格好悪いですけど・・・
お礼
こんばんは なんと、私はここへ質問に来る前に、Time::Localの説明を読んでいたのでした。 それにも関わらず、私のおつむではサブルーチンをこしらえることが出来ませんでした、とほほ お教えいただいたサブルーチンを、ちこっと改造して、いい感じのサブルーチンが出来ました。 しかし、既に私のスクリプトは、そこそこ軽快に動いているので、このサブルーチンは、次のバージョンアップで入れることにしよう