public function testGetDatesBetweenTwoDatesInARange() { $monthsData = DateTimeUtil::getDatesBetweenTwoDatesInARange('2013-01-20', '2013-01-24'); $compareData = array('2013-01-20', '2013-01-21', '2013-01-22', '2013-01-23', '2013-01-24'); $this->assertEquals($compareData, $monthsData); $monthsData = DateTimeUtil::getDatesBetweenTwoDatesInARange('2013-06-29', '2013-07-01'); $compareData = array('2013-06-29', '2013-06-30', '2013-07-01'); $this->assertEquals($compareData, $monthsData); $monthsData = DateTimeUtil::getDatesBetweenTwoDatesInARange('2012-12-28', '2013-01-03'); $compareData = array('2012-12-28', '2012-12-29', '2012-12-30', '2012-12-31', '2013-01-01', '2013-01-02', '2013-01-03'); $this->assertEquals($compareData, $monthsData); }
/** * 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; }