Magno Alberto
Magno Alberto

Reputation: 668

PHP: How calculate calendar days with all 42 days

The goal is exclusively to get a range of days, in other words , start date and end date, as if it were a "calendar matrix", containing the 42 days, being the days of the current month, with the days of the previous month and next month. No need to present (render) a calendar, only get dates.

For example, follow image below.

I need to enter a certain month of a given year, and would need to get this range of days, as picture.

Using PHP Carbon, I easily get the days of the current month, using startOfMonth(), endOfMonth() , subMonth(), addMonth().

Doing this, I get every day of these 3 months, but the goal is to be able to "filter" these days to present only the interval equal to a calendar, but obviously something dynamic, ie, if I use Carbon, would simply inform the desired date , and get "filtered" range, respecting the position of each "cell".

$prev_start = Carbon::now()->subMonth()->startOfMonth();
$prev_end = Carbon::now()->subMonth()->endOfMonth();

$start = Carbon::now()->startOfMonth();
$end = Carbon::now()->endOfMonth();

$next_start = Carbon::now()->addMonth()->startOfMonth();
$next_end = Carbon::now()->addMonth()->endOfMonth();

calendar

Upvotes: 0

Views: 774

Answers (1)

apokryfos
apokryfos

Reputation: 40690

So here's what you can do:

$monthStart = Carbon::now()->startOfMonth();
$monthEnd = Carbon::now()->endOfMonth();

$calendarStart = $monthStart->startOfWeek(Carbon::SUNDAY); 
$calendarEnd = $monthEnd->endOfWeek(Carbon::SATURDAY);

$calendarStart and $calendarEnd should now contain the first and last day that will be displayed in a single screen. This assumes that the calendar will expand the first and last week displayed.

If you are using a calendar that always shows 42 days regardless you can just do:

$monthStart = Carbon::now()->startOfMonth();

$calendarStart = $monthStart->startOfWeek(Carbon::SUNDAY); 
$calendarEnd = $calendarStart->addDay(42);

Upvotes: 1

Related Questions