0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【PHP】元のDateTimeオブジェクトを変更せずに日付のmodifyを行いたい

Posted at

概要

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');
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?