我有一个事件表,每个事件都有一个开始日期和一个结束日期。
我需要显示日期列表,并显示每天发生的事件。
例如,假设我有一个事件运行于单星期三,另一个事件运行于星期二,我正在尝试创建一个表,如下所示:
Mon: Event 1
Tue: Event 1, Event 2
Wed: Event 1, Event 2
Thu: Event 2
我看到的唯一方法是每天运行一次查询,或者加载给定日期范围内的所有事件,然后如果它们持续超过一天,则将它们复制到我的代码中。两种方法似乎都是很棘手的,并且我确定我缺少了一些东西。
有没有更整洁的方式做到这一点?
结构:
id INT
name VARCHAR
start_date DATE
end_date DATE
当前查询(由于此数据库结构令人震惊,因此略有简化):
SELECT *
FROM events
WHERE start_date <= $somedate
AND end_date >= $somedate
...其中$ somedate是给定的日期。(是的,我在代码中正确转义了它!)
选择特定日期范围内的事件(我假设是特定月份)。然后循环浏览该月的各天,并显示另一个内部循环,该循环显示该日期发生的所有事件。
<?php
$events = getEvents(); // some function that returns events from database
echo '<ol class="calendar">';
for ($i = 1; $i <= cal_days_in_month(); $i++) {
echo '<li>';
$beginning = mktime(0, 0, 0, date('n'), $i, date('Y'));
$end = mktime(23, 59, 59, date('n'), $i, date('Y'));
$events_on_day = array();
foreach ($events as $event) {
if ($event->start_date <= $end && $event->end_date >= $beginning) {
$events_on_day[] = $event;
}
}
if ($events_on_day > 0) {
echo '<ul>';
foreach ($events_on_day as $event_on_day) {
echo '<li>' . $event_on_day->name . '</li>';
}
echo '</ul>';
}
}
echo '</ol>';
?>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句