[PHP]次の土日(今週末)の日時を取得する

PHP で日付を扱う場合は基本的に DateTime クラスを使いますが、add() などを使って日時を操作するとオブジェクト自身が書き換えられてしまうため計算結果だけが欲しいという場合には向きません。
そのような場合 DateTimeImmutable クラスを使うと add() した場合新しい DateTimeImmutable オブジェクトを返すのでもともとのオブジェクトの日時を書き換えることなく日時計算の結果だけを取得できます。

<?php
$now = new DateTimeImmutable();    // 今日
$w = (int)$now->format('w');
$diff = 6 - $w;

$sat = $now->add(new DateInterval('P' . $diff . 'D'));
$sun = $now->add(new DateInterval('P' . ($diff + 1)  . 'D'));

echo $sat->format('Y-m-d');    // 土曜日
echo $sun->format('Y-m-d');    // 日曜日

ちなみに今日の日付などが DateTime オブジェクトの形で与えられている場合、次のようにして変換することも出来ます。

$date = new DateTime();
$mutable = DateTimeImmutable::createFromMutable( $date );