当前位置: 首页> 最新文章列表> date_create_immutable和date_create函数有什么区别?PHP中如何选择使用?

date_create_immutable和date_create函数有什么区别?PHP中如何选择使用?

gitbox 2025-06-29

一、date_create() 函数

date_create() 是一个用来创建可变日期时间对象的函数。通过调用此函数,你可以创建一个DateTime对象,表示当前的日期和时间,或者通过传入一个特定的日期字符串来创建特定的日期。

<span><span><span class="hljs-meta">&lt;?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>-&gt;</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">?&gt;</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>-&gt;</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>-&gt;</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_immutable()date_create() 类似,也用于创建日期对象,但它返回的是一个不可变的 DateTimeImmutable 对象。这意味着一旦对象被创建,其日期和时间无法再被修改。

<span><span><span class="hljs-meta">&lt;?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>-&gt;</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">?&gt;</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>-&gt;</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>-&gt;</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>-&gt;</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()
返回类型DateTimeDateTimeImmutable
可否修改对象可以修改不可修改
使用场景适用于需要修改日期的场景适用于不希望修改原始日期的场景

四、如何选择使用

  1. 使用 date_create()

    • 当你需要对日期进行修改时,使用date_create()更加合适。它允许直接修改日期和时间对象,例如通过modify()add()等方法。

    • 如果你的应用需要频繁地调整和操作日期时间值,date_create()提供了更多的灵活性。

  2. 使用 date_create_immutable()

    • 如果你希望保证日期对象不可变,确保在处理日期时不会不小心改变它们,使用date_create_immutable()是一个更安全的选择。

    • 在多线程或并发场景下,使用不可变对象可以避免一些潜在的并发问题,因为不可变对象不会受到外部修改的影响。

五、总结

date_create()date_create_immutable()虽然都能创建日期对象,但它们之间的关键区别在于可变性。date_create()返回一个可以修改的对象,而date_create_immutable()返回一个不可变的对象。选择哪一个函数,取决于你的应用需求。如果需要灵活的日期修改,date_create()是更合适的选择;如果你需要确保对象不被意外修改,date_create_immutable()则是最佳选择。