从年初获取前几个月的列表
Get list of previous months from start of the year
我正在尝试使用 Carbon
.
获取前几个月的列表
预期结果:
January, February, March, April
到目前为止我做了什么:
$now = Carbon::now();
$startMonth = $now->startOfMonth()->subMonth($now->month);
$currentMonth = $now->startOfMonth();
$diff = $currentMonth->diffInMonths($startMonth);
我用 Carbon::now()
得到一年的第一个月,然后我试图计算日期之间的差异,但我得到 0
。
我也找不到任何方法 returns 月份列表作为预期输出。
您将原始变量设置为上一年的 12 月 1 日,因为您一直在修改原始变量而不是复制它。相反,从 now()
创建两个变量,然后您可以使用它来创建 CarbonPeriod 来迭代。
$firstOfYear = Carbon::now()->firstOfYear();
$firstOfLastMonth = Carbon::now()->firstOfMonth()->subMonth(); // If you want to include the current month, drop ->subMonth()
$period = CarbonPeriod::create($firstOfYear, '1 month', $firstOfLastMonth);
foreach($period as $p) echo $p->format('F')."\n";
为什么不是简单的 while
循环?
use Carbon\Carbon;
$previousMonths = [];
$currentDate = Carbon::now()->startOfMonth();
while ($currentDate->year == Carbon::now()->year) {
$previousMonths[] = $currentDate->format('F');
$currentDate->subMonth();
}
$previousMonths
现在是:
[
"April",
"March",
"February",
"January",
]
编辑
如果您需要它们的顺序相反,则:
$previousMonths = array_reverse($previousMonths);
那么 $previousMonths
将是:
[
"January",
"February",
"March",
"April",
]
另一种使用 PHP 范围的方法:
$now = Carbon::now();
$months = collect( range(1, $now->month) )->map( function($month) use ($now) {
return Carbon::createFromDate($now->year, $month)->format('F');
})->toArray();
这应该return从一月到当前月份的月份集合(如果使用 toArray() 则为数组)(类似于预期结果)
我正在尝试使用 Carbon
.
预期结果:
January, February, March, April
到目前为止我做了什么:
$now = Carbon::now();
$startMonth = $now->startOfMonth()->subMonth($now->month);
$currentMonth = $now->startOfMonth();
$diff = $currentMonth->diffInMonths($startMonth);
我用 Carbon::now()
得到一年的第一个月,然后我试图计算日期之间的差异,但我得到 0
。
我也找不到任何方法 returns 月份列表作为预期输出。
您将原始变量设置为上一年的 12 月 1 日,因为您一直在修改原始变量而不是复制它。相反,从 now()
创建两个变量,然后您可以使用它来创建 CarbonPeriod 来迭代。
$firstOfYear = Carbon::now()->firstOfYear();
$firstOfLastMonth = Carbon::now()->firstOfMonth()->subMonth(); // If you want to include the current month, drop ->subMonth()
$period = CarbonPeriod::create($firstOfYear, '1 month', $firstOfLastMonth);
foreach($period as $p) echo $p->format('F')."\n";
为什么不是简单的 while
循环?
use Carbon\Carbon;
$previousMonths = [];
$currentDate = Carbon::now()->startOfMonth();
while ($currentDate->year == Carbon::now()->year) {
$previousMonths[] = $currentDate->format('F');
$currentDate->subMonth();
}
$previousMonths
现在是:
[
"April",
"March",
"February",
"January",
]
编辑
如果您需要它们的顺序相反,则:
$previousMonths = array_reverse($previousMonths);
那么 $previousMonths
将是:
[
"January",
"February",
"March",
"April",
]
另一种使用 PHP 范围的方法:
$now = Carbon::now();
$months = collect( range(1, $now->month) )->map( function($month) use ($now) {
return Carbon::createFromDate($now->year, $month)->format('F');
})->toArray();
这应该return从一月到当前月份的月份集合(如果使用 toArray() 则为数组)(类似于预期结果)