date_create() 是一个用来创建可变日期时间对象的函数。通过调用此函数,你可以创建一个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() 类似,也用于创建日期对象,但它返回的是一个不可变的 DateTimeImmutable 对象。这意味着一旦对象被创建,其日期和时间无法再被修改。
<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()则是最佳选择。