1

2日間の時差を取得しようとしています。しかし、特定の日時については、間違った回答が返ってきます

これが私のコードです:

/****************************************
$start_date = new DateTime('23:58:40'); *These two still give 
$end_date = new DateTime('00:00:00');   *a wrong answer
*****************************************/

$start_date = new DateTime('23:58:40');
$end_date = new DateTime('00:11:36');

$dd = date_diff($end_date, $start_date);

//Giving a wrong answer: Hours = 23, Minutes = 47, Seconds = 4 
echo "Hours = $dd->h, Minutes = $dd->i, Seconds = $dd->s";
4

2 に答える 2

5

オーサーは正しいです。2 回提供します。日付がなければ、最後の日付が実際には翌日であることを知る方法はありません。変数に「end_date」という名前を付けたからといって、PHP がその意味を理解しているとは限りません。

おそらく、次のようにリクエストに日付も含める必要があります

$start_date = new DateTime('2012-12-07 23:58:40');
$end_date = new DateTime('2012-12-08 00:11:36');

本当に時間だけで作業したい場合:

function differenceInTimes($start, $end) {
    if (strtotime($start)>strtotime($end)) {
        //start date is later then end date
        //end date is next day
        $s = new DateTime('2000-01-01 '.$start);
        $e = new DateTime('2000-01-02 '.$end);
    } else {
        //start date is earlier then end date
        //same day
        $s = new DateTime('2000-01-01 '.$start);
        $e = new DateTime('2000-01-01 '.$end);
    }

    return date_diff($s, $e);
}

$start_date = '23:58:40';
$end_date = '00:11:36';
$dd = differenceInTimes($start_date, $end_date);
echo "Hours = $dd->h, Minutes = $dd->i, Seconds = $dd->s";

//Hours = 0, Minutes = 12, Seconds = 56 
于 2012-12-07T14:12:45.307 に答える
1

引数をdate_diffに交換します

$dd = date_diff($start_date, $end_date);

編集

この理論を実際にテストした後、それはまったく役に立たないことがわかり、同じ答えが得られました。

于 2012-12-07T14:10:29.583 に答える