0

私は自動予約を行うスクリプトを使用しています。以下のスニペットは、利用可能な時間を見つけるためのものです。しかし、今まで聞いたことのないものに出くわしました。

スクリプトでvar_dumpを使用して変数を確認すると(コーディング時に常に実行します)、スクリプトは正常に実行されます。ただし、これらの行を削除すると、スクリプトが意図したとおりに機能しなくなります。スクリプトが実行されるため、デバッグにvar_dumpを使用できません。

function getfirstfree($length, $limit) {
    $length = new DateInterval('PT' . $length . 'M');
    $table = "randevu";
    $today = date('Y-m-d', time());
    $q = $this->db->get_where('randevu', array('date' => $today));
    $events = $q->result_array();
    if ($q->num_rows() > 0) {
        for ($i=0; $i < sizeof($q); $i += 1) { 
            $c_ends = new DateTime($events[$i]['ends']);
            $n_starts = new DateTime($events[$i+1]['starts']);
            $freetime = $c_ends->diff($n_starts);
            $length_w_break = $length;
            $length_w_break->i = $length_w_break->i + 10;
            var_dump($length_w_break);
            var_dump($freetime);
            if ($freetime > $length_w_break) {
                echo "ok";
                return $c_ends->add(new DateInterval('PT10M'));
            }
            else {
                return "no";
            }
        }
    }

}

var_dumpがないと、スクリプトはnoを返します。var_dumpを使用すると、最初の空きスロットが返されます。
データベースから取得された現在の値は
1->開始12:56:09終了12:56:092-
>開始13:33:11終了13:33:11

var_dump($ freetime);を更新します。出力を変更します

4

1 に答える 1

0

現在の PHP バージョンでは、DateInverval オブジェクトと DateTime オブジェクトを使用した計算がこのバグの原因です。それらの使用を避け、古いスタイルの unix-time メソッドによる計算を使用してください。

于 2011-07-15T17:57:26.920 に答える