- ベストアンサー
日付の比較について
文字列で $time1 = "2004-05-24 28:30:00"; と $time2 = "2004-05-25 04:10:00"; があるとします。 $time1が$time2より時間的に早い場合は print "まだです。"; $time1が$time2より時間的に同じは print "今です。"; $time1が$time2より時間的に遅い場合は print "もう終わりました"; と表示したいのですが、 if($time1 < $time2){ print "まだです。"; }elseif($time1 == $time2){ print "今です。"; }else{ print "もう終わりました。"; } って簡単にはできないですよね。 なにかいい方法ありますでしょうか? ご指導下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
文字列をmktime関数にあてはめれば、 if文で判断できるかと。
その他の回答 (2)
- Dpop
- ベストアンサー率51% (279/544)
> でも閏年の計算とか、30日、31日の判別などしないといけないですよね。 そうですね。でも。簡単ですよね。 未テストバージョンですが、こんな感じで、年月日部分の合計は求まるんじゃ無いかな。と思います。 //テストの日をセット $y = 2004; $m = 05; $d = 24; //前年までの日付を求める $day0 = ($y-1) * 365; //平年を計算 $day0 += ($y-1) % 4; //4で割り切れる年は閏年 $day0 -= ($y-1) % 100; //100で割り切れる年は閏年ではない $day0 += ($y-1) % 400; //400で割り切れる年は閏年 //今年の閏年 $mmax = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); if ($y % 4 == 0) { $mmax[1] = 29; if ($y % 100 == 0) { $mmax[1] = 28; if ($y % 400 == 0) { $mmax[1] = 29; } ] } # 今年の今日までの日数 $day1 = 0; if ($m > 2) { for ($i = 0; $i <= $m-2; $i) { //今月は対象としないので-2 $day1 += $mmax[$i]; } } $day1 += $d; // 年月日の合計 $day = $day0 + $day1; あとは、時分秒を処理すれば良いのだけど。。。 単純に計算すると天文学的数字になるので、ちょっと工夫して下さいね。 ヒント 1.僕が書いたソースも、同様なアルゴリズムを使っています。 2.年月日の方が。。。なら時分秒は。。。 がんばって下さいね。
- Dpop
- ベストアンサー率51% (279/544)
まずはヒントだけ。。。(笑) どうしても降参の様でしたら、答えの例を書きますが、まずはヒントだけ書きます。 年月日時分秒を全て秒の単位に直しましょう。 後は分かると思います。がんばってくださいね。
お礼
ヒント有難うございます。 なるほど、そうゆう手もありますね。 でも閏年の計算とか、30日、31日の判別などしないといけないですよね。
お礼
返信ありがとうございます。 やはりPHPにはこういった関数があったのですね。 マニュアル見ました。 ありがとうございます。 これ使います。 色々と簡単で便利な関数があって助かりますが、Dropさんのようなロジックで解決する力がなくなるような気もします。 みなさんありがとうございました。
補足
失礼しました。 Dropさん⇒Dpopさん 申し訳ありませんm(_ _;)m