public static function makeDatesListByRange(DateRange $range, IntervalUnit $unit, $hash = true)
 {
     $date = $unit->truncate($range->getStart());
     if ('Date' == get_class($range->getStart())) {
         $date = Date::create($date->toStamp());
     }
     $dates = array();
     do {
         if ($hash) {
             $dates[$date->toString()] = $date;
         } else {
             $dates[] = $date;
         }
         $date = $date->spawn('+ 1' . $unit->getName());
     } while ($range->getEnd()->toStamp() >= $date->toStamp());
     return $dates;
 }
 public function testCountMonthsNotOverlapped()
 {
     $unit = IntervalUnit::create('month');
     $this->assertEquals(4, $result = $unit->countInRange(TimestampRange::create($start = Timestamp::create('2008-12-31 23:59:58'), $end = Timestamp::create('2009-05-28 03:00:00')), false));
     $this->assertLessThanOrEqual($end->toStamp(), $start->spawn($result . ' ' . $unit->getName())->toStamp());
 }