protected function processOptimalSubperiods($startDate, $endDate) { while ($startDate->isEarlier($endDate) || $startDate == $endDate) { $endOfPeriod = null; $month = new Piwik_Period_Month($startDate); $endOfMonth = $month->getDateEnd(); $startOfMonth = $month->getDateStart(); if ($startDate == $startOfMonth && ($endOfMonth->isEarlier($endDate) || $endOfMonth == $endDate || $endOfMonth->isLater($this->today)) && !($endDate->isEarlier($this->today) && $this->today->compareMonth($endOfMonth) == 0)) { $this->addSubperiod($month); $endOfPeriod = $endOfMonth; } else { // From start date, // Process end of week $week = new Piwik_Period_Week($startDate); $startOfWeek = $week->getDateStart(); $endOfWeek = $week->getDateEnd(); $useMonthsNextIteration = $startDate->addPeriod(2, 'month')->setDay(1)->isEarlier($endDate); if ($useMonthsNextIteration && $endOfWeek->isLater($endOfMonth)) { $this->fillArraySubPeriods($startDate, $endOfMonth, 'day'); $endOfPeriod = $endOfMonth; } elseif ($endOfWeek->isLater($endDate) && ($endOfWeek->isEarlier($this->today) || $endDate->isEarlier($this->today))) { $this->fillArraySubPeriods($startDate, $endDate, 'day'); break 1; } elseif ($startOfWeek->isEarlier($startDate) && $endOfWeek->isEarlier($this->today)) { $this->fillArraySubPeriods($startDate, $endOfWeek, 'day'); $endOfPeriod = $endOfWeek; } else { $this->addSubperiod($week); $endOfPeriod = $endOfWeek; } } $startDate = $endOfPeriod->addDay(1); } }
protected function processOptimalSubperiods($startDate, $endDate) { while($startDate->isEarlier($endDate) || $startDate == $endDate) { $endOfPeriod = null; $month = new Piwik_Period_Month($startDate); $endOfMonth = $month->getDateEnd(); $startOfMonth = $month->getDateStart(); if($startDate == $startOfMonth && ($endOfMonth->isEarlier($endDate) || $endOfMonth == $endDate || $endOfMonth->isLater($this->today) ) // We don't use the month if // the end day is in this month, is before today, and month not finished && !($endDate->isEarlier($this->today) && $this->today->compareMonth($endOfMonth) == 0) ) { $this->addSubperiod($month); $endOfPeriod = $endOfMonth; } else { // From start date, // Process end of week $week = new Piwik_Period_Week($startDate); $startOfWeek = $week->getDateStart(); $endOfWeek = $week->getDateEnd(); $useMonthsNextIteration = $startDate->addPeriod(2, 'month')->setDay(1)->isEarlier($endDate); if($useMonthsNextIteration && $endOfWeek->isLater($endOfMonth)) { $this->fillArraySubPeriods($startDate, $endOfMonth, 'day'); $endOfPeriod = $endOfMonth; } // If end of this week is later than end date, we use days elseif($endOfWeek->isLater($endDate) && ($endOfWeek->isEarlier($this->today) || $endDate->isEarlier($this->today)) ) { $this->fillArraySubPeriods($startDate, $endDate, 'day'); break 1; } elseif($startOfWeek->isEarlier($startDate) && $endOfWeek->isEarlier($this->today)) { $this->fillArraySubPeriods($startDate, $endOfWeek, 'day'); $endOfPeriod = $endOfWeek; } else { $this->addSubperiod($week); $endOfPeriod = $endOfWeek; } } $startDate = $endOfPeriod->addDay(1); } }