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 );
Similar Posts:
- [PHP]指定した日時まであと何日(何時間)あるかを調べてカウントダウンする
- [PHP]ある曜日に該当する日だけを表示する
- [PHP]日付から曜日を割り出す
- [PHP]PHPプログラミング学習者が陥りやすい10の失敗
- [PHP]フォーマットを指定してアメリカ式・イギリス式・日本式の日付を相互変換する
- [PHP]生年月日(誕生日)から星座を調べる
- [PHP]ある曜日の第n週は何日か調べる(国民の祝日)
- [PHP]WordPress用のサイトマップを独自に動的生成