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()則是最佳選擇。