PHP で日付と時刻を扱う場合、多くの場合、日付間隔を含む計算を実行する必要があります。 PHP は、期間を表す DateInterval クラスを提供します。ただし、2 つの DateInterval オブジェクトを追加するのは簡単ではありません。
この問題は、PHP がオブジェクトの演算子のオーバーロードをサポートしていないために発生します。その結果、DateInterval オブジェクトで演算子を使用すると、オブジェクトを文字列に変換しようとしますが、これはサポートされていません。これにより、予期しない動作と不正な計算が発生します。
2 つの DateInterval オブジェクトを追加するには、次の方法を使用できます。
完全な例は次のとおりです:
<code class="php">$a = new DateTime('14:25'); $b = new DateTime('17:30'); $interval1 = $a->diff($b); echo "interval 1: " . $interval1->format("%H:%I"); echo "<br />"; $c = new DateTime('08:00'); $d = new DateTime('13:00'); $interval2 = $c->diff($d); echo "interval 2: " . $interval2->format("%H:%I"); echo "<br />"; $e = new DateTime('00:00'); $f = clone $e; $e->add($interval1); $e->add($interval2); echo "Total interval: " . $f->diff($e)->format("%H:%I") . "\n";</code>
このソリューション新しい DateTime オブジェクト $e を作成し、それを午前 0 時 (00:00) に設定します。次に、add メソッドを使用して、最初と 2 番目の DateInterval オブジェクト ($interval1 と $interval2) を $e に追加します。最後に、元の参照点 ($f、これも午前 0 時) と更新された $e の差を計算して、合計期間を取得します。
より複雑なシナリオの場合は、 DateInterval クラスを拡張して、DateInterval オブジェクトを追加するための独自の動作を定義できます。これにより、期間をより便利な形式で保存し、計算をより効率的に実行できるようになります。
拡張クラスの例を次に示します:
<code class="php">class MyDateInterval extends DateInterval { public static function fromDateInterval(DateInterval $from) { return new MyDateInterval($from->format('P%yY%dDT%hH%iM%sS')); } public function add(DateInterval $interval) { foreach (str_split('ymdhis') as $prop) { $this->$prop += $interval->$prop; } } } $a = new DateTime('14:25'); $b = new DateTime('17:30'); $interval1 = $a->diff($b); echo "interval 1: " . $interval1->format("%H:%I") . "\n"; $c = new DateTime('08:00'); $d = new DateTime('13:00'); $interval2 = $c->diff($d); echo "interval 2: " . $interval2->format("%H:%I") . "\n"; $e = MyDateInterval::fromDateInterval($interval1); $e->add($interval2); echo "Total interval: " . $e->format("%H:%I") . "\n";</code>
この例では、MyDateInterval クラスは DateInterval を拡張します。そして、add メソッドをオーバーライドして、各コンポーネントの期間 (年、月、日、時、分、秒) を累積します。この拡張クラスを使用すると、DateInterval オブジェクトをより効率的かつ便利に追加できます。
以上がPHP で 2 つの DateInterval オブジェクトを追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。