检索一个月内的所有特定天数

use*_*216 5 php laravel php-carbon laravel-5

我正在尝试使用 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,
    ]);
}
Run Code Online (Sandbox Code Playgroud)

ish*_*egg 4

我确信有一种更高效的方法可以做到这一点,但我对 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>";
}
Run Code Online (Sandbox Code Playgroud)