ホームページ  >  記事  >  バックエンド開発  >  PHP で 2 つの DateInterval オブジェクトを追加するにはどうすればよいですか?

PHP で 2 つの DateInterval オブジェクトを追加するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-04 05:07:02854ブラウズ

How can I add two DateInterval objects in PHP?

PHP で 2 つの日付間隔を追加するにはどうすればよいですか?

PHP で日付と時刻を扱う場合、多くの場合、日付間隔を含む計算を実行する必要があります。 PHP は、期間を表す DateInterval クラスを提供します。ただし、2 つの DateInterval オブジェクトを追加するのは簡単ではありません。

この問題は、PHP がオブジェクトの演算子のオーバーロードをサポートしていないために発生します。その結果、DateInterval オブジェクトで演算子を使用すると、オブジェクトを文字列に変換しようとしますが、これはサポートされていません。これにより、予期しない動作と不正な計算が発生します。

解決策

2 つの DateInterval オブジェクトを追加するには、次の方法を使用できます。

  1. 新しい DateTime オブジェクトを作成し、基準点 (午前 0 時など) に設定します。
  2. add メソッドを使用して、最初の DateInterval を DateTime オブジェクトに追加します。
  3. add メソッドを使用して、2 番目の DateInterval を DateTime オブジェクトに追加します。
  4. 元の参照ポイントと更新された DateTime オブジェクトの差を計算して、合計期間を取得します。

完全な例は次のとおりです:

<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。