1

2つのタイムマークの間に時間間隔を作成する関数があります。strtotime()関数は機能しますが、クラスからアップグレードして使用するのに苦労していますDateTime

以下は、エラーが発生せずに作成したコードのパッチです。

$timestart = new DateTime("14:00:00");
$timestop = new DateTime("20:00:00");
$date_diff = $timestop->diff($timestart);
$time_diff = $date_diff->format('%H');

次は、コード全体がそのままです。DateInterval could not be converted to int上記のコードを使用してエラーが発生します。クラスを正しく実装する方法を教えてください。

実例:http ://codepad.org/jSFUxAnp

function timemarks() 
    {       

        //times are actually retrieved from db
        $timestart = strtotime("14:00:00");
        $timestop = strtotime("20:00:00");

        $time_diff = $timestop - $timestart; //time difference

        //if time difference equals negative value, it means that $timestop ends second day 
        if ($time_diff <= 0) 
        {
            $timestop = strtotime( '+1 day' , strtotime( $row->timestop ) ); //add 1 day and change the timetsamp
            $time_diff = $timestop - $timestart;
        }

        //create interval
        $split = 3;
        $interval = $time_diff/$split;

        //get all timemarks
        $half_interval = $interval / 2;
        $mid = $timestart + $half_interval;     
        for ( $i = 1; $i < $split; $i ++) {
            //round intervals   
            $round_mid = round($mid / (15 * 60)) * (15 * 60);
            $result .= date('H:i:s', $round_mid) . ", ";
            $mid += $interval;
        }       
        $round_mid = round($mid / (15 * 60)) * (15 * 60);
        $result .= date('H:i:s', $round_mid);

        return $result;
    } 

出力15:00:00, 17:00:00, 19:00:00

4

1 に答える 1

2

実際には DateTime を使用していますが、これらは DateTime インスタンスを作成するための単なるエイリアスです

同等のものは次のようになります。

$timestart = new DateTime("14:00:00");
$timestop = new DateTime("20:00:00");
$date_diff = $timestop->diff($timestart);
$time_diff = $date_diff->format('%H');

これは機能するはずです。テストしたところ、正しい結果が得られました。

于 2012-06-17T01:37:46.953 に答える