检索一个月内的所有特定日期

I'm trying to retrieve all of the Mondays and Tuesdays and the last Sunday of every month with Carbon since a specific date in the past. Then I would like to loop through the array of days and create an even for that day. I'm trying to figure out how to do that?

// 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,
    ]);
}

I'm sure there's a more performant way of doing this but I'm not that familiar with Carbon. Here, you'll get 3 arrays, each with each Monday, Tuesdays and last Sundays of each month since 2000. You can then iterate over each DatePeriod, or merge the intervals to get one big DatePeriod, to create your events.

<?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>";
}