在Laravel中使用php Carbon生成日历,显示多个日期,同时通过foreach循环添加外部数据



我正在尝试使用Laravel 9中的Carbon构建一个简单的日历。此外,我需要在特定日期显示数据库中的一些内容。日历制作得很好,没有其他内容,但有了内容,一些没有外部数据的日期会重复。

控制器代码

$date = empty($date) ? Carbon::now() : Carbon::createFromDate($date);
$startOfCalendar = $date->copy()->firstOfMonth()->startOfWeek(Carbon::SUNDAY);
$endOfCalendar = $date->copy()->lastOfMonth()->endOfWeek(Carbon::SATURDAY);
$html = '<div class="calendar">';
$html .= '<div class="month-year">';
$html .= '<span class="month">' . $date->format('M') . '</span>';
$html .= '<span class="year">' . $date->format('Y') . '</span>';
$html .= '</div>';
$html .= '<div class="days">';
$dayLabels = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
foreach ($dayLabels as $dayLabel)
{
$html .= '<span class="day-label">' . $dayLabel . '</span>';
}
$get_events = CalendarEvents::where("event_date",">=",date("Y-m-d", strtotime($startOfCalendar)))->get();
while($startOfCalendar <= $endOfCalendar)
{
$extraClass = $startOfCalendar->format('m') != $date->format('m') ? 'dull' : '';
$extraClass .= $startOfCalendar->isToday() ? ' today' : '';
foreach ($get_events as $events) {
if($events->event_date == date('Y-m-d',strtotime($startOfCalendar))) {
$html .= '<span class="day flip' . $extraClass . '"><span class="content">' . $startOfCalendar->format('j').'|'.$events->event_name. '</span></span>';
}
else {
$html .= '<span class="day' . $extraClass . '"><span class="content">' . $startOfCalendar->format('j') . '</span></span>';
break;
}
}
$startOfCalendar->addDay();
}
$html .= '</div></div>';

在这里,事件的日期打印一次,但没有事件的日期会打印多次。我该如何更正?提前感谢

您的循环似乎有点偏离。假设您在某些日子有多个事件,而在其他日子没有事件,那么您可能想要以下内容。

$date = empty($date) ?Carbon::now() : Carbon::createFromDate($date);
$startOfCalendar = $date->copy()->firstOfMonth()->startOfWeek(Carbon::SUNDAY);
$endOfCalendar = $date->copy()->lastOfMonth()->endOfWeek(Carbon::SATURDAY);
$html = '<div class="calendar">';
$html .= '<div class="month-year">';
$html .= '<span class="month">' . $date->format('M') . '</span>';
$html .= '<span class="year">' . $date->format('Y') . '</span>';
$html .= '</div>';
$html .= '<div class="days">';
$dayLabels = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
foreach ($dayLabels as $dayLabel) 
{
$html .= '<span class="day-label">' . $dayLabel . '</span>';
}
$get_events = CalendarEvents::where("event_date", ">=", date("Y-m-d", strtotime($startOfCalendar)))->get();
while ($startOfCalendar <= $endOfCalendar) 
{
$extraClass = $startOfCalendar->format('m') != $date->format('m') ? 'dull' : '';
$extraClass .= $startOfCalendar->isToday() ? ' today' : '';
$startOfCalendarFormated = $startOfCalendar->format('j');
$startOfCalendarSqlFormat = $startOfCalendar->format('Y-m-d');
$html .= '<span class="day flip' . $extraClass . '"><span class="content">';
$filled = false;
foreach ($get_events as $events) {
if ($events->event_date == $startOfCalendarSqlFormat) {
$html .= $startOfCalendarFormated . '|' . $events->event_name . "<br>";
$filled = true;
}
}
if(!$filled){
$html .= "No events | {$startOfCalendarFormated}";
}
$html .= '</span></span>';
$startOfCalendar->addDay();
}
$html .= '</div></div>';

我假设你希望你的HTML格式如何,但希望你能得到图片。

$date = empty($date) ?Carbon::now() : Carbon::createFromDate($date);
$startOfCalendar = $date->copy()->firstOfMonth()->startOfWeek(Carbon::SUNDAY);
$endOfCalendar = $date->copy()->lastOfMonth()->endOfWeek(Carbon::SATURDAY);
$html = '<div class="calendar">';
$html .= '<div class="month-year">';
$html .= '<span class="month">' . $date->format('M') . '</span>';
$html .= '<span class="year">' . $date->format('Y') . '</span>';
$html .= '</div>';
$html .= '<div class="days">';
$dayLabels = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
foreach ($dayLabels as $dayLabel) 
{
$html .= '<span class="day-label">' . $dayLabel . '</span>';
}
$get_events = CalendarEvents::where("event_date", ">=", date("Y-m-d", strtotime($startOfCalendar)))->get();
while ($startOfCalendar <= $endOfCalendar) 
{
$extraClass = $startOfCalendar->format('m') != $date->format('m') ? 'dull' : '';
$extraClass .= $startOfCalendar->isToday() ? ' today' : '';
$startOfCalendarFormated = $startOfCalendar->format('j');
$startOfCalendarSqlFormat = $startOfCalendar->format('Y-m-d');
$html .= '<span class="day flip' . $extraClass . '"><span class="content">';
$filled = false;
foreach ($get_events as $events) {
if ($events->event_date == $startOfCalendarSqlFormat) {
$html .= $startOfCalendarFormated . '|' . $events->event_name . "<br>";
$filled = true;
}
}
if(!$filled){
$html .= "No events | {$startOfCalendarFormated}";
}
$html .= '</span></span>';
$startOfCalendar->addDay();
}
$html .= '</div></div>';

对于刀刃,你进入什么位置才能看到这个?

这正是我想要的,我需要在日历中看到一些数据,但我还无法查看,这可能是我需要的,但我不明白在刀片中放什么才能看到的结果

最新更新