Google カレンダーからイベントをインポートし、解析して別の場所に表示しています。さまざまな日付にまたがるイベントに行き詰まっています。例えば:
イベント 1
日付: 2013 年 4 月 29 日 - 2013 年 5 月 3 日イベント 2
日付: 2013 年 5 月 1 日 - 2013 年 5 月 3 日イベント 3
日付: 2013 年 5 月 3 日 - 2013 年 5 月 6 日
2013 年 5 月 3 日のイベントを表示する場合、イベント 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);
}
}
}
}
}