PHP: Как рассчитать календарные дни со всеми 42 днями - PullRequest
0 голосов
/ 28 сентября 2019

Целью является исключительно получение диапазона дней, другими словами, даты начала и окончания, как если бы это была «календарная матрица», содержащая 42 дня, являющиеся днями текущего месяца, с днямипредыдущего месяца и следующего месяца.Нет необходимости представлять (отображать) календарь, только получать даты.

Например, следуйте изображению ниже.

Мне нужно ввести определенный месяц данного года, и мне нужно будет получитьэтот диапазон дней, как показано на рисунке.

Используя PHP Carbon, я легко получаю дни текущего месяца, используя startOfMonth(), endOfMonth(), subMonth(), addMonth().

Делая это, я получаю каждый день из этих 3 месяцев, но цель состоит в том, чтобы иметь возможность «фильтровать» эти дни, чтобы представить только интервал, равный календарю, но, очевидно, что-то динамическое, т.е. если яиспользовать Carbon, просто сообщит желаемую дату и получит «отфильтрованный» диапазон с учетом положения каждой «ячейки».

$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

1 Ответ

1 голос
/ 28 сентября 2019

Итак, вот что вы можете сделать:

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

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

$calendarStart и $calendarEnd теперь должны содержать первый и последний день, которые будут отображаться на одном экране.Это предполагает, что календарь будет расширять первую и последнюю отображаемую неделю.

Если вы используете календарь, который всегда показывает 42 дня, независимо от того, что вы можете просто сделать:

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

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