我正在从 Google 日历导入事件并解析它们以在其他地方显示。我被困在跨越一系列日期的事件上。例如:
活动 1
日期:2013 年 4 月 29 日 - 2013 年 5 月 3 日活动 2
日期:5/01/2013 - 5/03/2013活动 3
日期:5/03/2013 - 5/06/2013
当我显示 5/03/2013 的事件时,我需要显示事件 1、2 和 3。
到目前为止,我的计划是生成一个 DatePeriod,其中包含事件开始日期和结束日期之间的所有日期,然后遍历它,在日期键下添加事件信息。换句话说,我将有一个日期数组,每个日期都包含一个事件数组。
这就是我到目前为止所拥有的。我认为我走在正确的道路上,但任何帮助将不胜感激。谢谢。
public function groupEvents()
{
foreach($this->events as $event)
{
// Date is in the format of "Mon Apr 29, 2013 to Wed May 1, 2013".
if(preg_match_all("/\w{3} \w{3} \d{0,2}. \d{4}/", $event->getDate(), $matches))
{
// If there is more than one match then the event spans multiple days.
if(count($matches[0] > 1))
{
// Following line grabs the first date in the format of "Apr 29 2013"
$bDate = substr($matches[0][0],4,6) . substr($matches[0][0],11);
// Following line grabs the last date in the format of "May 1,2013"
$eDate = substr($matches[0][1],4,6) . substr($matches[0][1],11);
// Create a new DateTime based on the beginning date
$begin = new DateTime($bDate);
// Create a new DateTime based on the ending date
$end = new DateTime($eDate);
// Interval of 1 day.
$interval = new DateInterval('P1D');
// Create a DatePeriod of all dates between the beginning and end dates
$period = new DatePeriod($begin,$interval,$end);
foreach($period as $d)
{
// Problems start...
$this->newList[$d] = array($d => $newEvent);
}
}
}
}
}