PHP5.2に対して、PHP5.3ではDateTimeクラスに対してメソッドが追加されているため、5.3向けに書かれたコードを5.2の環境で動作させようとすると問題が発生する事があります。
このような場合の対処法を幾つか確認したのでメモしておきます。
//------------------------------- // 現在の時刻を取得 //------------------------------- $sysdate = new DateTime(); //------------------------------- // 現在時刻を文字列で取得 //------------------------------- echo $sysdate->format("Y/m/d H:i:s"); //------------------------------- // unixtimeを取得 //------------------------------- echo $sysdate->getTimestamp(); // echo $sysdate->format("U"); // 5.2まではこちら //------------------------------- // 翌日を取得(P1D = plus 1 day) //------------------------------- $tommorow = $sysdate->add( "P1D" ); // $tommorow = clone $sysdate; // 5.2まではこちら(2行) // $tommorow->modify('+1 day'); //------------------------------------------ // 2つのDateTimeオブジェクトの差分を求める //------------------------------------------ $interval = $sysdate->diff($tommorow); // 5.2までの対応は後述 echo $interval->format( "%R%a日差です" ); //------------------------------------------ // 年・月・日をばらばらで取得(これは問題なし) //------------------------------------------ $year = $sysdate->format("Y"); $month = $sysdate->format("m"); $day = $sysdate->format("d"); echo $year; echo $month; echo $day; |
diff()メソッドを5.2で使用したい場合は、該当のメソッドが用意されていないだけでなく、diff()の戻り値であるDateIntervalクラス自体がないのでちょっと面倒です。
これに関しては、http://www.php.net/manual/en/datetime.diff.php#97810にてDennis Cが代替関数を提案しているので、こちらを参考にすると便利です。
function date_diff($date1, $date2) { $current = $date1; $datetime2 = date_create($date2); $count = 0; while(date_create($current) < $datetime2){ $current = gmdate("Y-m-d", strtotime("+1 day", strtotime($current))); $count++; } return $count; } echo (date_diff('2010-3-9', '2011-4-10')." days <br \>"); |
関連記事
コメントを残す