[PHP]php5.3でDateTimeクラスに追加されたメソッドと同等の事を5.2で行う

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 \>");

関連記事

コメントを残す

メールアドレスが公開されることはありません。