需要有关循环开始日期的帮助

时间:2011-01-30 23:57:01

标签: php datetime

我有一个包含开头和结束日期的活动日历,如下所示:

16.08.2010 12:00:00 - 21.08.2010 20:00:00
16.08.2010 20:00:00 - 21.08.2010 23:00:00
18.08.2010 17:00:00 - 18.08.2010 19:00:00

每当一个事件持续超过一天,我需要每天循环。

我找到了这个帖子,我认为可以帮助我:How to find the dates between two specified date?

我无法使用PHP 5.3的解决方案,因为我的服务器运行PHP 5.2 其他解决方案不会产生输出。

这是我尝试做的事情:

$events = $data['events']; 

foreach($ev as $e) :

  $startDate  =  date("Y-m-d",strtotime( $e->startTime ));
  $endDate    =  date("Y-m-d",strtotime( $e->endTime ));

  for($current = $startDate; $current <= $endDate; $current += 86400) {
      echo '<div>'.$current.' - '.$endDate.' - '.$e->name.'</div>';
  } 
endforeach;

从理论上讲,这应该会延续几天的事件。 但那并没有发生。

逻辑在某处错了......请帮忙:)。

2 个答案:

答案 0 :(得分:2)

问题是您正在尝试向字符串添加数字。 date('Y-m-d')生成一个类似2011-01-31的字符串。向其中添加数字[按预期]无效:'2011-01-31' + 86400 = ?

尝试以下几点:

// setting to end of final day to avoid glitches in end times
$endDate = strtotime(date('Y-m-d 23:59:59', strtotime($e->endTime)));
$current = strtotime($e->startTime);

while ($current <= $endDate) {
    printf('<div>%s - %s - %s</div>', date('Y-m-d', $current), date('Y-m-d', $endDate), $e->name);
    $current = strtotime('+1 day', $current);
}

答案 1 :(得分:0)

日期(“Y-m-d”)错误,您需要在for循环中使用strtotime结果。试试这个,它应该工作:

$events = array(
    array('16.08.2010 12:00:00', '21.08.2010 20:00:00', 'event1'),
    array('16.08.2010 20:00:00', '21.08.2010 23:00:00', 'event2'),
    array('18.08.2010 17:00:00', '18.08.2010 19:00:00', 'event3'),
);

$dayLength = 86400;
foreach($events as $e) :

  $startDate  =  strtotime( $e[0] );
  $endDate    =  strtotime( $e[1] );

  if(($startDate+$dayLength)>=$endDate) continue;

  for($current = $startDate; $current <= $endDate; $current += $dayLength) {
      echo '<div>'.date('Y-m-d', $current).' - '.date('Y-m-d', $endDate).' - '.$e[2].'</div>';
  }

endforeach;