我试图在过去的特定日期之后用Carbon检索所有星期一和星期二以及每个月的最后一个星期日。 然后我想循环一整天,为那一天创造一个偶数。我试图找出如何做到这一点?
// Get all dates of Mondays, Tuesdays, last Sundays of every Month since the first Monday of January of 2000.
$eventDates = Carbon::parse('first Monday of January 2000');
$i = 0;
while($eventDates->lt(Carbon::now()->subDay(14))) {
$event = factory(Event::class)->create([
'date' => $eventDate,
]);
}
答案 0 :(得分:3)
我确信有更高效的方法可以做到这一点,但我对Carbon并不熟悉。在这里,您将获得3个阵列,每个阵列包含自2000年以来每个星期一,星期二和每个月的最后一个星期日。然后,您可以迭代每个DatePeriod
,或合并间隔以获得一个大DatePeriod
,创建你的活动。
<?php
use Carbon\Carbon;
use Carbon\CarbonInterval;
$monday = Carbon::parse('First Monday of January 2000');
$tuesday = Carbon::parse('First Tuesday of January 2000');
$sunday = Carbon::parse('Last Sunday of January 2000');
$now = Carbon::now();
$mondays = new DatePeriod(
$monday,
CarbonInterval::week(),
$now
);
$tuesdays = new DatePeriod(
$tuesday,
CarbonInterval::week(),
$now
);
$sundays = new DatePeriod(
$sunday,
CarbonInterval::week(4),
$now
);
$allDays = [];
foreach ($mondays as $day) {
$allDays[] = $day;
}
foreach ($tuesdays as $day) {
$allDays[] = $day;
}
foreach ($sundays as $day) {
$allDays[] = $day;
}
usort($allDays, function ($a, $b) {
return strtotime($a) - strtotime($b);
});
foreach ($allDays as $day) {
echo $day->format("M D Y-m-d")."<br>";
}
答案 1 :(得分:0)
filter()
和isWeekday()
方法:$period = CarbonPeriod::between('2020-03-01', '2020-03-31')->filter('isWeekday');
foreach ($period as $date) {
$days[] = $date->format('Y-m-d');
}
echo implode('<br>', $days);
这将打印出来
2020-03-02
2020-03-03
2020-03-04
2020-03-05
2020-03-06
2020-03-09
2020-03-10
2020-03-11
2020-03-12
2020-03-13
2020-03-16
2020-03-17
2020-03-18
2020-03-19
2020-03-20
2020-03-23
2020-03-24
2020-03-25
2020-03-26
2020-03-27
2020-03-30
2020-03-31