countOfActiveDays = $countOfActiveDays; $this->daysToDisplay = $daysToDisplay; if ( !isset($today)){ $today = new DateTime(); } $today->setTime(0, 0); $firstActiveDay = clone $today; $firstActiveDay->setTime(0, 0); $this->firstActiveDate = $firstActiveDay; $lastActiveDay = clone $firstActiveDay; $lastActiveDay->setTime(0, 0); $lastActiveDay->modify('+' . $this->countOfActiveDays . ' day'); $this->lastActiveDate = $lastActiveDay; $firstDisplayDate = clone $firstActiveDay; $firstDisplayDate->modify('this week'); $firstDisplayDate->setTime(0, 0); $this->firstDisplayDate = $firstDisplayDate; $lastDisplayDate = clone $firstDisplayDate; $lastDisplayDate->setTime(0, 0); $lastDisplayDate->modify('+' . $this->daysToDisplay . ' day'); $this->lastDisplayDate = $lastDisplayDate; } public static function createInterval($today = null,$countOfActiveDays = 14,$daysToDisplay = 21) { return new EventInterval($today,$countOfActiveDays,$daysToDisplay); } /** * @param DateTime $day * @return bool true if active, otherwise false */ public function isActive($day) { $afterFirstActiveDay = $this->firstActiveDate < $day || $this->firstActiveDate == $day; $beforeLastActiveDay = $this->lastActiveDate > $day || $this->lastActiveDate == $day; return ($afterFirstActiveDay && $beforeLastActiveDay); } /** * @return DateTime[] */ public function getAllDisplayDates() { $dates = array(); for ($i = 0; $i < $this->daysToDisplay; $i++) { $date = clone $this->firstDisplayDate; $date = $date->modify('+' . $i . ' day'); $dates[] = $date; } return $dates; } }