date_create()は、変数DateTimeオブジェクトを作成するために使用される関数です。この関数を呼び出すことにより、現在の日付と時刻を表すDateTimeオブジェクトを作成したり、特定の日付文字列を渡して特定の日付を作成したりできます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$datetime</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date_create</span></span><span>(</span><span><span class="hljs-string">'2025-06-21 12:00:00'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$datetime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
特徴:
date_create()は、 DateTimeオブジェクトを返送します。これは可変です。オブジェクトのメソッドを呼び出すことにより、その値を変更できます。
modify() 、 add() 、 sub()などのオブジェクトメソッドにより、日付と時刻を変更することができます。
<span><span><span class="hljs-variable">$datetime</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date_create</span></span><span>(</span><span><span class="hljs-string">'2025-06-21 12:00:00'</span></span><span>);
</span><span><span class="hljs-variable">$datetime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">modify</span></span><span>(</span><span><span class="hljs-string">'+1 day'</span></span><span>); </span><span><span class="hljs-comment">// 現在の翌日に変更します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$datetime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>); </span><span><span class="hljs-comment">// 変更された日付を出力します</span></span><span>
</span></span>
date_create_immutable()はdate_create()に類似しており、日付オブジェクトの作成にも使用されますが、不変のdateimmutableオブジェクトを返します。これは、オブジェクトが作成されると、その日付と時刻をもう変更できなくなることを意味します。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$datetimeImmutable</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date_create_immutable</span></span><span>(</span><span><span class="hljs-string">'2025-06-21 12:00:00'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$datetimeImmutable</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
特徴:
date_create_immutable() DateTimeImMutableオブジェクトを返します。これは不変で、作成後のメソッドを通じて日付と時刻を変更することはできません。
DateTimeImmutableオブジェクトの値を直接変更することはできませんが、新しいオブジェクトを返すことで「変更」効果を達成できます。
<span><span><span class="hljs-variable">$datetimeImmutable</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date_create_immutable</span></span><span>(</span><span><span class="hljs-string">'2025-06-21 12:00:00'</span></span><span>);
</span><span><span class="hljs-variable">$newDatetime</span></span><span> = </span><span><span class="hljs-variable">$datetimeImmutable</span></span><span>-></span><span><span class="hljs-title function_ invoke__">modify</span></span><span>(</span><span><span class="hljs-string">'+1 day'</span></span><span>); </span><span><span class="hljs-comment">// 新しいオブジェクトを返します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$newDatetime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>); </span><span><span class="hljs-comment">// 変更された日付を出力します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$datetimeImmutable</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>); </span><span><span class="hljs-comment">// 元の日付を出力します,変更されていません</span></span><span>
</span></span>
特性 | date_create() | date_create_immutable() |
---|---|---|
返品タイプ | DateTime | DateTimeImmutable |
オブジェクトを変更できますか | 変更できます | 変更されていません |
シナリオを使用します | 日付を変更する必要があるシナリオに適しています | 元の日付を変更したくないシナリオに適しています |
date_create()を使用:
日付を変更する必要がある場合、 date_create()を使用する方が適切です。 Modify() 、 add()などのメソッドなど、日付と時刻のオブジェクトを直接変更できます。
アプリケーションが日付時間の値を頻繁に調整および操作する必要がある場合、 date_create()はより柔軟性を提供します。
date_create_immutable()を使用してください。
日付オブジェクトが不変であることを確認し、日付を処理するときに誤って変更されないことを確認する場合、 date_create_immutable()を使用する方がより安全なオプションです。
マルチスレッドまたは同時シナリオでは、不変のオブジェクトを使用すると、不変のオブジェクトが外部の変更によって影響を受けることはないため、いくつかの潜在的な同時性の問題を回避できます。
date_create()およびdate_create_immutable()は両方とも日付オブジェクトを作成しますが、それらの間の重要な違いは可変性です。 date_create()は、変更できるオブジェクトを返し、 date_create_immutable()は不変のオブジェクトを返します。選択する関数は、アプリケーション要件によって異なります。柔軟な日付の変更が必要な場合、 date_create()がより適切な選択肢です。オブジェクトが予期せず変更されていないことを確認する必要がある場合は、 date_create_immutable()が最良の選択です。