繁体   English   中英

使用碳 Laravel 获取上个月和上一年

[英]get last month and year using carbon laravel

这可能很简单,我有$month$year ,但我正在尝试获取lastMonthYearlastToLastMonthYear

    $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 值不断更新每一行。 有什么办法可以得到预期的结果吗?

正确的方法是使用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 CarbonImmutable的更改不会CarbonImmutable

我还删除了startOfMonth方法,它没有用,因为默认情况下,Carbon 实例将是:

Carbon\CarbonImmutable @1630454400 {#5430
    date: 2021-09-01 00:00:00.0 UTC (+00:00),
}

您可以使用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');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM