You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Carbon的addDays方法后原起始日期被修改,如何保留原日期?

解决Carbon修改起始日期的问题

Carbon实例是可变对象,addDays()这类日期操作方法会直接修改调用它的原对象,同时返回修改后的对象引用。所以你执行$endDate = $startDate->addDays($qtyDays);时,$endDate和$startDate指向的是同一个Carbon实例,导致起始日期被同步修改。

要保留起始日期的原始值,只需要先复制一个Carbon实例副本,再对副本进行操作,常用方法有三种:

方法一:使用copy()方法(推荐)

copy()是Carbon专门提供的复制实例方法,用法简洁直观:

$startDate = Carbon::createFromFormat('Y-m-d H:i', '2024-02-01 08:00');
$qtyDays = 25;
$endDate = $startDate->copy()->addDays($qtyDays);

方法二:使用PHP原生clone关键字

利用PHP的对象克隆特性复制实例:

$startDate = Carbon::createFromFormat('Y-m-d H:i', '2024-02-01 08:00');
$qtyDays = 25;
$endDate = clone $startDate;
$endDate->addDays($qtyDays);

方法三:通过instance()静态方法创建副本

将原实例传入Carbon::instance()生成新实例:

$startDate = Carbon::createFromFormat('Y-m-d H:i', '2024-02-01 08:00');
$qtyDays = 25;
$endDate = Carbon::instance($startDate)->addDays($qtyDays);

以上三种方法都能保证$startDate保留初始值,$endDate得到正确的计算结果。

内容的提问来源于stack exchange,提问作者Dom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:27:37