使用 carbon laravel 获取上月和上年
get last month and year using carbon laravel
这可能很简单,我有 $month
和 $year
,但我正在尝试获取 lastMonthYear
和 lastToLastMonthYear
。
$date = Carbon::create($year, $month)->startOfMonth();
$sameMonthLastYear = $date->subYear()->format('Ym');
$lastMonthYear = $date->subMonth()->format('Ym');
$LastToLastMonthYear = $date->subMonth()->format('Ym');
考虑到 $month=9 和 $year=2021,我想得到
sameMonthLastYear = 202009
lastMonthYear = 202108
lastToLastMonthYear = 202107
但我得到
sameMonthLastYear = 202009
lastMonthYear = 202008
lastToLastMonthYear = 202008
因为 $date 值在每一行都在不断更新。有什么办法可以得到预期的结果吗?
您可以使用copy()
方法:
$date = Carbon::create($year, $month)->startOfMonth();
$sameMonthLastYear = $date->copy()->subYear()->format('Ym');
$lastMonthYear = $date->copy()->subMonth()->format('Ym');
$LastToLastMonthYear = $date->copy()->subMonths(2)->format('Ym');
正确的方法是使用CarbonImmutable
:
$date = CarbonImmutable::create($year, $month);
$sameMonthLastYear = $date->subYear()->format('Ym'); //202009
$lastMonthYear = $date->subMonth()->format('Ym'); //202108
$LastToLastMonthYear = $date->subMonths(2)->format('Ym'); //202107
使用 CarbonImmutable
,您对 $date
所做的更改不会保留。
我还删除了 startOfMonth
方法,它没有用,因为默认情况下,Carbon 实例将是:
Carbon\CarbonImmutable @1630454400 {#5430
date: 2021-09-01 00:00:00.0 UTC (+00:00),
}
这可能很简单,我有 $month
和 $year
,但我正在尝试获取 lastMonthYear
和 lastToLastMonthYear
。
$date = Carbon::create($year, $month)->startOfMonth();
$sameMonthLastYear = $date->subYear()->format('Ym');
$lastMonthYear = $date->subMonth()->format('Ym');
$LastToLastMonthYear = $date->subMonth()->format('Ym');
考虑到 $month=9 和 $year=2021,我想得到
sameMonthLastYear = 202009
lastMonthYear = 202108
lastToLastMonthYear = 202107
但我得到
sameMonthLastYear = 202009
lastMonthYear = 202008
lastToLastMonthYear = 202008
因为 $date 值在每一行都在不断更新。有什么办法可以得到预期的结果吗?
您可以使用copy()
方法:
$date = Carbon::create($year, $month)->startOfMonth();
$sameMonthLastYear = $date->copy()->subYear()->format('Ym');
$lastMonthYear = $date->copy()->subMonth()->format('Ym');
$LastToLastMonthYear = $date->copy()->subMonths(2)->format('Ym');
正确的方法是使用CarbonImmutable
:
$date = CarbonImmutable::create($year, $month);
$sameMonthLastYear = $date->subYear()->format('Ym'); //202009
$lastMonthYear = $date->subMonth()->format('Ym'); //202108
$LastToLastMonthYear = $date->subMonths(2)->format('Ym'); //202107
使用 CarbonImmutable
,您对 $date
所做的更改不会保留。
我还删除了 startOfMonth
方法,它没有用,因为默认情况下,Carbon 实例将是:
Carbon\CarbonImmutable @1630454400 {#5430
date: 2021-09-01 00:00:00.0 UTC (+00:00),
}