使用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
相关产品推荐
相关产品推荐

