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

问题描述

因此,我试图根据用户注册日期添加年份,并且需要比较日期,但是它是从注册日期开始更新原始日期。

$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-17 03: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

解决方法

在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;
,

添加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;
,

如果您不希望实例在添加/订阅/设置上发生突变,请使用CarbonImmutable

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...