Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Retrieving All Days Specific in A Month

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,
    ]);
}
like image 390
user3732216 Avatar asked Aug 21 '17 17:08

user3732216


People also ask

How do you get all dates in a month in a moment?

from({length: moment(). daysInMonth()}, (x, i) => moment(). startOf('month'). add(i, 'days'));

How do you find the day of the month from the date object?

To get the year, month and day from a date object: Call the getMonth() method to get an integer from 0 (January) to 11 (December). Call the getDate() method to get the day of the month.

How do you get no of days in a month in JS?

JavaScript getDate() Method: This method returns the number of days in a month (from 1 to 31) for the defined date. Return value: It returns a number, from 1 to 31, representing the day of the month.


1 Answers

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>";
}
like image 86
ishegg Avatar answered Sep 17 '22 14:09

ishegg