public static function getEventsByDateRange($start, $end, $cal_ids) { $evt_start = 'start>="' . $start . '"'; $evt_end = 'start<="' . $end . '"'; $rec_start = 'start<="' . $end . '"'; $rec_end = '(last_occurrence>="' . $start . '" OR last_occurrence is null)'; $events = array(); $query = CalendarEvent::find()->andFilterWhere(['and', $evt_start, $evt_end])->orFilterWhere(['and', $rec_start, $rec_end])->andWhere(['calendar_id' => $cal_ids]); foreach ($query->all() as $evt) { $events = array_merge($events, self::getDatesByEventID($evt->id, $start, $end)); } return $events; }