ICal\ICal::eventsFromRange PHP Method

eventsFromRange() public method

Events will be returned if the start or end date is contained within the range (inclusive), or if the event starts before and end after the range. If a start date is not specified or of a valid format, then the start of the range will default to the current time and date of the server. If an end date is not specified or of a valid format, the the end of the range will default to the current time and date of the server, plus 20 years. Note that this function makes use of UNIX timestamps. This might be a problem for events on, during, or after January the 29th, 2038. See http://en.wikipedia.org/wiki/Unix_time#Representing_the_number
public eventsFromRange ( string $rangeStart = false, string $rangeEnd = false ) : array
$rangeStart string Start date of the search range.
$rangeEnd string End date of the search range.
return array of EventObjects
    public function eventsFromRange($rangeStart = false, $rangeEnd = false)
    {
        $events = $this->sortEventsWithOrder($this->events(), SORT_ASC);
        if (empty($events)) {
            return array();
        }
        $extendedEvents = array();
        if ($rangeStart) {
            try {
                $rangeStart = new \DateTime($rangeStart);
            } catch (\Exception $e) {
                error_log('ICal::eventsFromRange: Invalid date passed (' . $rangeStart . ')');
                $rangeStart = false;
            }
        }
        if (!$rangeStart) {
            $rangeStart = new \DateTime();
        }
        if ($rangeEnd) {
            try {
                $rangeEnd = new \DateTime($rangeEnd);
            } catch (\Exception $e) {
                error_log('ICal::eventsFromRange: Invalid date passed (' . $rangeEnd . ')');
                $rangeEnd = false;
            }
        }
        if (!$rangeEnd) {
            $rangeEnd = new \DateTime();
            $rangeEnd->modify('+20 years');
        }
        // If start and end are identical and are dates with no times...
        if ($rangeEnd->format('His') == 0 && $rangeStart->getTimestamp() == $rangeEnd->getTimestamp()) {
            $rangeEnd->modify('+1 day');
        }
        $rangeStart = $rangeStart->getTimestamp();
        $rangeEnd = $rangeEnd->getTimestamp();
        foreach ($events as $anEvent) {
            $eventStart = $anEvent->dtstart_array[2];
            $eventEnd = isset($anEvent->dtend_array[2]) ? $anEvent->dtend_array[2] : null;
            if ($eventStart >= $rangeStart && $eventStart < $rangeEnd || $eventEnd !== null && ($eventEnd > $rangeStart && $eventEnd <= $rangeEnd || $eventStart < $rangeStart && $eventEnd > $rangeEnd)) {
                $extendedEvents[] = $anEvent;
            }
        }
        if (empty($extendedEvents)) {
            return array();
        }
        return $extendedEvents;
    }

Usage Example

コード例 #1
0
ファイル: index.php プロジェクト: johngrogg/ics-parser
echo $ical->eventCount;
?>
</span>
            The number of events
        </li>
        <li class="list-group-item">
            <span class="badge"><?php 
echo $ical->todoCount;
?>
</span>
            The number of todos
        </li>
    </ul>

    <?php 
$events = $ical->eventsFromRange('2016-03-01', '2016-04-31');
if ($events) {
    echo '<h4>Events March through April:</h4>';
}
?>
    <div class="row">
    <?php 
foreach ($events as $event) {
    ?>
        <div class="col-sm-6 col-md-4">
            <div class="thumbnail">
                <div class="caption">
                    <h3><?php 
    echo $event->summary . ' (' . date('d-m-Y H:i', $ical->iCalDateToUnixTimestamp($event->dtstart)) . ')';
    ?>
</h3>