/** * @param $quarter * @param $year * @param string $timeZoneString * * @return MomentPeriodVo * @throws MomentException */ public static function getQuarterPeriod($quarter, $year, $timeZoneString = 'UTC') { switch ($quarter) { case 1: $startMonth = 1; $endMonth = 3; break; case 2: $startMonth = 4; $endMonth = 6; break; case 3: $startMonth = 7; $endMonth = 9; break; case 4: $startMonth = 10; $endMonth = 12; break; default: throw new MomentException('Invalid quarter. The range of quarters is 1 - 4. You asked for: ' . $quarter); } // set start $start = new Moment(); $start->setTimezone($timeZoneString)->setYear($year)->setMonth($startMonth)->setDay(1)->setTime(0, 0, 0); // set end $end = new Moment(); $end->setTimezone($timeZoneString)->setYear($year)->setMonth($endMonth)->setDay($end->format('t'))->setTime(23, 59, 59); // set period vo $momentPeriodVo = new MomentPeriodVo(); return $momentPeriodVo->setInterval($quarter)->setStartDate($start)->setEndDate($end); }
/** * @param $period * * @return MomentPeriodVo * @throws MomentException */ public function getPeriod($period) { switch ($period) { case 'week': $interval = $this->format('W'); $start = new Moment('@' . $this->format('U')); $start->setTimezone($this->getTimezoneString())->subtractDays($this->getDaysAfterStartOfWeek())->setTime(0, 0, 0); $end = new Moment('@' . $this->format('U')); $end->setTimezone($this->getTimezoneString())->addDays(6 - $this->getDaysAfterStartOfWeek())->setTime(23, 59, 59); break; // ------------------------------ // ------------------------------ case 'month': $maxMonthDays = $this->format('t'); $currentMonthDay = $this->format('j'); $interval = $this->getMonth(); $start = new Moment('@' . $this->format('U')); $start->setTimezone($this->getTimezoneString())->subtractDays($currentMonthDay - 1)->setTime(0, 0, 0); $end = new Moment('@' . $this->format('U')); $end->setTimezone($this->getTimezoneString())->addDays($maxMonthDays - $currentMonthDay)->setTime(23, 59, 59); break; // ------------------------------ // ------------------------------ case 'quarter': $quarter = $this->getQuarter(); $momentPeriodVo = MomentHelper::getQuarterPeriod($quarter, $this->getYear(), $this->getTimezoneString()); $start = $momentPeriodVo->getStartDate(); $end = $momentPeriodVo->getEndDate(); $interval = $quarter; break; // ------------------------------ // ------------------------------ default: throw new MomentException("Period \"{$period}\" is not supported. Supported: \"week\", \"month\", \"quarter\"."); } $momentPeriodVo = new MomentPeriodVo(); return $momentPeriodVo->setRefDate($this)->setInterval($interval)->setStartDate($start)->setEndDate($end); }