0

私はphpで次のDateTimeオブジェクトを持っています:

[start1] => DateTime Object ( 
    [date] => 2012-05-21 12:59:59
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)

[end1] => DateTime Object ( 
    [date] => 2012-05-21 22:36:00
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)

との結果:

$time->end1->diff($time->start1

は:

DateInterval Object ( [y] => 0 [m] => 0 [d] => 0 [h] => 12 [i] => 36 [s] => 2 [invert] => 1 [days] => 0 )

なぜ9時間ではなく12時間の期間を取得するのですか?

4

2 に答える 2

2

解決策を見つけました...diffを実行する前に、start1オブジェクトでsub()を実行します。今、私は私の結果が間違っている理由を見てきました...これが答えですが、私は本当にこれが起こっている理由を知りません。 http://www.php.net/manual/en/datetime.sub.php#101175

于 2012-05-22T07:57:04.567 に答える
0

これは実際には2つのDateTimeオブジェクトを作成するために行うことである可能性があることを理解していますが、おそらくそれが役立つかどうかを確認するために、私がうまくいったものを置くと思いました。

私が行った2つのオブジェクトを作成するには:

$start1 = new DateTime('2012-05-21 12:59:59', new DateTimeZone('Europe/Berlin'));
$end1   = new DateTime('2012-05-21 22:36:00', new DateTimeZone('Europe/Berlin'));

そして、2つのオブジェクトと差分を印刷します。

print_r($end1->diff($start1));

私が得た:

DateTime Object
(
    [date] => 2012-05-21 12:59:59
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)
DateTime Object
(
    [date] => 2012-05-21 22:36:00
    [timezone_type] => 3
    [timezone] => Europe/Berlin
)
DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 9
    [i] => 36
    [s] => 1
    [invert] => 1
    [days] => 0
)

start1オブジェクトとend1オブジェクトの両方の出力は同じであることがわかりますが、私の差分は正しい9時間の違いを反映しています。おそらく、PHPのバージョンでDateTimeオブジェクトを作成する方法について何か奇妙なことがありますか?

于 2012-05-21T16:28:04.750 に答える