laravel carbon 原始日期在添加年份后更改

laravel carbon original date changed after adding year

所以我尝试根据用户注册日期添加一年,我需要比较日期,但它正在从注册日期更新原始日期。

$registered_at = Carbon::parse('2020-10-17 03:05:03');
$final_date = $registered_at->addYear();

echo $registered_at.'<br>';
echo $final_date;

结果一样,我想把registered_at日期保留到2020-10-1703:05:03

registered_at : 2021-10-17 03:05:03
final date:     2021-10-17 03:05:03

我期待2020-10-17 03:05:03

registered_at : 2020-10-17 03:05:03
final date:     2021-10-17 03:05:03

添加 addYear() 值:

$registered_at = Carbon::parse('2020-10-17 03:05:03');
$final_date = $registered_at->addYear(1); // added 1 year

echo $registered_at; // 2020-10-17 03:05:03
echo $final_date; // 2021-10-17 03:05:03

您需要先像这样复制实例:

$date_parse    = Carbon::parse('2020-10-17 03:05:03');
$registered_at = $date_parse->copy();;
$final_date    = $date_parse->addYear();

echo $registered_at.'<br>';
echo $final_date;

在 Carbon 中,当你调用任何方法时,它都会改变实例。

在你的情况下,你应该使用 copy() 方法在调用方法之前创建一个新实例。

例如:

$registered_at = Carbon::parse('2020-10-17 03:05:03');
$final_date = $registered_at->copy()->addYear();

echo $registered_at.'<br>';
echo $final_date;

如果您不希望您的实例在 add/sub/set 发生变化,请使用 CarbonImmutable:

$registered_at = CarbonImmutable::parse('2020-10-17 03:05:03');
$final_date = $registered_at->addYear();

echo $registered_at.'<br>';
echo $final_date;

否则使用->copy()创建一个新实例。