/** * Given a begin date, end date and grouping type, return array of data that includes information on how the * grouping breaks up by the date range including the start/end dateTime for each range and a display label * @param string $beginDate * @param string $endDate * @param string $groupBy * @param boolean $treatDatesAsDefinitive - if the group begin/end dates should be restricted by the passed * begin end dates, then set this true. If you want the true begin month or end month to be returned then set * to false. * @throws NotSupportedException * @return array */ public static function makeGroupedDateTimeData($beginDate, $endDate, $groupBy, $treatDatesAsDefinitive = true) { assert('is_string($beginDate)'); assert('is_string($endDate)'); assert('is_string($groupBy)'); $data = array(); if ($groupBy == MarketingOverallMetricsForm::GROUPING_TYPE_DAY) { foreach (DateTimeUtil::getDatesBetweenTwoDatesInARange($beginDate, $endDate) as $date) { $data[] = array('beginDate' => $date, 'endDate' => $date, 'displayLabel' => static::resolveAbbreviatedDayMonthDisplayLabel($date)); } } elseif ($groupBy == MarketingOverallMetricsForm::GROUPING_TYPE_WEEK) { foreach (DateTimeUtil::getWeekStartAndEndDatesBetweenTwoDatesInARange($beginDate, $endDate) as $beginWeekDate => $endWeekDate) { $displayLabel = static::resolveAbbreviatedDayMonthDisplayLabel($beginWeekDate); if ($treatDatesAsDefinitive) { if ($beginWeekDate < $beginDate) { $beginWeekDate = $beginDate; } if ($endWeekDate > $endDate) { $endWeekDate = $endDate; } } $data[] = array('beginDate' => $beginWeekDate, 'endDate' => $endWeekDate, 'displayLabel' => $displayLabel); } } elseif ($groupBy == MarketingOverallMetricsForm::GROUPING_TYPE_MONTH) { foreach (DateTimeUtil::getMonthStartAndEndDatesBetweenTwoDatesInARange($beginDate, $endDate) as $beginMonthDate => $endMonthDate) { if ($treatDatesAsDefinitive) { if ($beginMonthDate < $beginDate) { $beginMonthDate = $beginDate; } if ($endMonthDate > $endDate) { $endMonthDate = $endDate; } } $data[] = array('beginDate' => $beginMonthDate, 'endDate' => $endMonthDate, 'displayLabel' => static::resolveAbbreviatedMonthDisplayLabel($beginMonthDate)); } } else { throw new NotSupportedException(); } return $data; }
public function testGetMonthStartAndEndDatesBetweenTwoDatesInARange() { $monthsData = DateTimeUtil::getMonthStartAndEndDatesBetweenTwoDatesInARange('2013-02-01', '2013-06-01'); $compareData = array('2013-02-01' => '2013-02-28', '2013-03-01' => '2013-03-31', '2013-04-01' => '2013-04-30', '2013-05-01' => '2013-05-31', '2013-06-01' => '2013-06-30'); $this->assertEquals($compareData, $monthsData); $monthsData = DateTimeUtil::getMonthStartAndEndDatesBetweenTwoDatesInARange('2013-01-20', '2013-08-03'); $compareData = array('2013-01-01' => '2013-01-31', '2013-02-01' => '2013-02-28', '2013-03-01' => '2013-03-31', '2013-04-01' => '2013-04-30', '2013-05-01' => '2013-05-31', '2013-06-01' => '2013-06-30', '2013-07-01' => '2013-07-31', '2013-08-01' => '2013-08-31'); $this->assertEquals($compareData, $monthsData); $monthsData = DateTimeUtil::getMonthStartAndEndDatesBetweenTwoDatesInARange('2013-01-20', '2013-01-26'); $compareData = array('2013-01-01' => '2013-01-31'); $this->assertEquals($compareData, $monthsData); $monthsData = DateTimeUtil::getMonthStartAndEndDatesBetweenTwoDatesInARange('2013-01-20', '2014-01-26'); $compareData = array('2013-01-01' => '2013-01-31', '2013-02-01' => '2013-02-28', '2013-03-01' => '2013-03-31', '2013-04-01' => '2013-04-30', '2013-05-01' => '2013-05-31', '2013-06-01' => '2013-06-30', '2013-07-01' => '2013-07-31', '2013-08-01' => '2013-08-31', '2013-09-01' => '2013-09-30', '2013-10-01' => '2013-10-31', '2013-11-01' => '2013-11-30', '2013-12-01' => '2013-12-31', '2014-01-01' => '2014-01-31'); $this->assertEquals($compareData, $monthsData); $monthsData = DateTimeUtil::getMonthStartAndEndDatesBetweenTwoDatesInARange('2013-04-01', '2013-04-01'); $compareData = array('2013-04-01' => '2013-04-30'); $this->assertEquals($compareData, $monthsData); }