/** * Generates the subperiods (one for each month of the year) */ protected function generate() { if ($this->subperiodsProcessed) { return; } parent::generate(); $year = $this->date->toString("Y"); for ($i = 1; $i <= 12; $i++) { $this->addSubperiod(new Month(Date::factory("{$year}-{$i}-01"))); } }
/** * Generates the subperiods (one for each day in the month) */ protected function generate() { if ($this->subperiodsProcessed) { return; } parent::generate(); $date = $this->date; $startMonth = $date->setDay(1)->setTime('00:00:00'); $endMonth = $startMonth->addPeriod(1, 'month')->setDay(1)->subDay(1); $this->processOptimalSubperiods($startMonth, $endMonth); }
/** * Generates the subperiods (one for each day in the month) */ protected function generate() { if ($this->subperiodsProcessed) { return; } parent::generate(); $date = $this->date; $startMonth = $date->setDay(1); $currentDay = clone $startMonth; while ($currentDay->compareMonth($startMonth) == 0) { $this->addSubperiod(new Day($currentDay)); $currentDay = $currentDay->addDay(1); } }
/** * Generates the subperiods - one for each day in the week */ protected function generate() { if ($this->subperiodsProcessed) { return; } parent::generate(); $date = $this->date; if ($date->toString('N') > 1) { $date = $date->subDay($date->toString('N') - 1); } $startWeek = $date; $currentDay = clone $startWeek; while ($currentDay->compareWeek($startWeek) == 0) { $this->addSubperiod(new Day($currentDay)); $currentDay = $currentDay->addDay(1); } }
/** * Generates the subperiods * * @throws Exception */ protected function generate() { if ($this->subperiodsProcessed) { return; } parent::generate(); if (preg_match('/(last|previous)([0-9]*)/', $this->strDate, $regs)) { $lastN = $regs[2]; $lastOrPrevious = $regs[1]; if (!is_null($this->defaultEndDate)) { $defaultEndDate = $this->defaultEndDate; } else { $defaultEndDate = $this->today; } $period = $this->strPeriod; if ($period == 'range') { $period = 'day'; } if ($lastOrPrevious == 'last') { $endDate = $defaultEndDate; } elseif ($lastOrPrevious == 'previous') { if ('month' == $period) { $endDate = $defaultEndDate->subMonth(1); } else { $endDate = $defaultEndDate->subPeriod(1, $period); } } $lastN = $this->getMaxN($lastN); // last1 means only one result ; last2 means 2 results so we remove only 1 to the days/weeks/etc $lastN--; $lastN = abs($lastN); $startDate = $endDate->addPeriod(-1 * $lastN, $period); } elseif ($dateRange = Range::parseDateRange($this->strDate)) { $strDateStart = $dateRange[1]; $strDateEnd = $dateRange[2]; $startDate = Date::factory($strDateStart); if ($strDateEnd == 'today') { $strDateEnd = 'now'; } elseif ($strDateEnd == 'yesterday') { $strDateEnd = 'yesterdaySameTime'; } // we set the timezone in the Date object only if the date is relative eg. 'today', 'yesterday', 'now' $timezone = null; if (strpos($strDateEnd, '-') === false) { $timezone = $this->timezone; } $endDate = Date::factory($strDateEnd, $timezone); } else { throw new Exception(Piwik::translate('General_ExceptionInvalidDateRange', array($this->strDate, ' \'lastN\', \'previousN\', \'YYYY-MM-DD,YYYY-MM-DD\''))); } if ($this->strPeriod != 'range') { $this->fillArraySubPeriods($startDate, $endDate, $this->strPeriod); return; } $this->processOptimalSubperiods($startDate, $endDate); // When period=range, we want End Date to be the actual specified end date, // rather than the end of the month / week / whatever is used for processing this range $this->endDate = $endDate; }