我正在尝试能够计算给定日期(今天)特定地点的总事件。使用24小时时间,我试图在foreach循环中找到当天的最后一个事件,然后当当天最后一个事件的end_time小于现在时,显示文本,"今天所有计划的事件都已结束。"
我的问题是xml数据包括所有房间14天的所有事件,我没有得到正确的计数。我在foreach中有几个if语句来简化它....
如果XML空间id ==房间id,则如果XML事件start_date等于今天,则If ($i <numItems美元)如果事件结束时间大于现在,显示这些事件>
我需要满足这些条件时的记录计数…当事件是今天的日期,并且与通过url传递的roomID在同一个房间时。把我的$numItems = $count($arr)放在foreach之前计算太多的记录,并且在foreach中放入一个计数总是只返回1的计数。
$arr = $this->data['events'];
$numItems = count($arr);
$i = 1;
foreach ($arr as $key => $reservation){
if ((int)$reservation->space_reservation->space_id == $roomID)
{
//test today's date
$resDT = date('m/d/y',strtotime($reservation->reservation_start_dt));
if ($resDT == date('m/d/y'))
{
if ($i < $numItems)
{
$repst = substr($reservation->event_start_dt,11,5);
$repet = substr($reservation->event_end_dt,11,5);
if ( (date('H:i',strtotime($repet))) > (date('H:i')) )
{
echo '<h2>' .$reservation->event_name. '</h2> ';
echo '<span class="dates">' .date('m/d/y',strtotime($reservation->event_start_dt)). ' </span> ';
echo '<span class="times">' .date('g:i a',strtotime($repst)). ' - ';
echo date('g:i a',strtotime($repet)). '</span> ';
echo '<br />';
} // ends if event end date has passed
//echo '<span style="color:#FFF200;">'.$i.'</span>';
echo '<br />';
}
//if $i equals last record
elseif ($i === $numItems) {
// test if last event ends show
if ( (date('g:i a',strtotime($repet))) < (date('g:i: a')) ){
echo '<span style="color:#FFF200;">All scheduled meetings/events have concluded for today. </span><br /><br />';
}
}
$i++;
} // ends if
} // ends if
} // ends for each
下面的代码将打印其中一个:
- 今天所有未完成的活动仅针对给定房间;
- 如果所有预定的活动都已结束,则显示"All scheduled events for today."
我添加了两个计数器供您使用:
- $totalEventsToday -计算给定房间今天安排的所有事件;
- $unfinishedEventsToday -计算今天在给定房间中计划的事件,其结束日期/时间尚未过去。
代码是这样的:
$today = date('m/d/y');
$events = $this->data['events'];
$totalEventsToday = 0;
$unfinishedEventsToday = 0;
// Check all reservations/events
foreach ($events as $reservation) {
// Process reservation/events for the given room only
if ((int) $reservation->space_reservation->space_id == $roomID)
{
// Process reservation/events for today only
$resDT = date('m/d/y', strtotime($reservation->reservation_start_dt));
if ($resDT == $today)
{
$totalEventsToday++;
$repst = substr($reservation->event_start_dt,11,5);
$repet = substr($reservation->event_end_dt,11,5);
// Process unfinished event
if ((date('H:i',strtotime($repet))) > (date('H:i')))
{
$unfinishedEventsToday++;
echo '<h2>' .$reservation->event_name. '</h2> ';
echo '<span class="dates">' .date('m/d/y',strtotime($reservation->event_start_dt)). ' </span> ';
echo '<span class="times">' .date('g:i a',strtotime($repst)). ' - ';
echo date('g:i a',strtotime($repet)). '</span> ';
echo '<br />';
} // ends if unfinished event
} // ends if today
} // ends if room
} // ends for each
// Test if there aren't any unfinished events left for today
if (!$unfinishedEvents){
echo '<span style="color:#FFF200;">All scheduled meetings/events have concluded for today. </span><br /><br />';
}
我想我真的不知道你的问题在哪里。您可以简单地添加一个计数器,就像我在下面对$currentEvents
所做的那样。
$arr = $this->data['events'];
$numItems = count($arr);
$currentEvents = 0;
$i = 1;
foreach ($arr as $key => $reservation){
if ((int)$reservation->space_reservation->space_id == $roomID)
{
//test today's date
$resDT = date('m/d/y',strtotime($reservation->reservation_start_dt));
if ($resDT == date('m/d/y'))
{
if ($i < $numItems)
{
$repst = substr($reservation->event_start_dt,11,5);
$repet = substr($reservation->event_end_dt,11,5);
if ( (date('H:i',strtotime($repet))) > (date('H:i')) )
{
$currentEvents++;
echo '<h2>' .$reservation->event_name. '</h2> ';
echo '<span class="dates">' .date('m/d/y',strtotime($reservation->event_start_dt)). ' </span> ';
echo '<span class="times">' .date('g:i a',strtotime($repst)). ' - ';
echo date('g:i a',strtotime($repet)). '</span> ';
echo '<br />';
} // ends if event end date has passed
//echo '<span style="color:#FFF200;">'.$i.'</span>';
echo '<br />';
}
//if $i equals last record
elseif ($i === $numItems) {
// test if last event ends show
if ( (date('g:i a',strtotime($repet))) < (date('g:i: a')) ){
echo '<span style="color:#FFF200;">All scheduled meetings/events have concluded for today. </span><br /><br />';
}
}
$i++;
} // ends if
} // ends if
} // ends for each