概要
PHPの日付で計算した後の値取得を行うとなると、DateTimeのオブジェクトを作成した後にmodify
関数を呼ぶ方法が挙げられます。[PHP] 日時の加算・減算をする(modify)の記事に、実装例があります。
ただ、注意点としてDateTimeのmodifyは破壊的なメソッドなので、modifyを呼び出した後に元のオブジェクトの値も変わってしまいます。元のDateTimeオブジェクトを変更せずに日付のmodifyを行いたい場合どうするか、というのを今回メモ書きします。
対応方針
modify後は新しいオブジェクトを使用したい場合、元のオブジェクトに変更を加えないDateTimeImmutable
クラスが用意されているので、これを使えばやりたいことができそうです。DateTimeImmutableの概要については【PHP】DateTimeクラス・DateTimeImmutableクラスのオブジェクトの違いの記事を参照ください。
では、DateTimeからDateTimeImmutableを作成したい場合どうするか。DateTimeImmutable::createFromMutableのドキュメントにある通り、DateTimeImmutableにはDateTimeから新しいオブジェクトを作成するcreateFromMutable
メソッドが用意されているので、これを使えばよさそうです。
実装サンプル
以下は、DateTimeのオブジェクトを受け取って、1日後の新しいDateTimeImmutableオブジェクトを返す実装のサンプルです。
use \DateTimeImmutable;
public function getPlusOneDayImmutableDateTime($dateTime) {
return DateTimeImmutable::createFromMutable($dateTime)->modify('+1 day');
}