public function Months()
 {
     if ($this->end === null) {
         return -1;
     }
     if ($this->end->Before($this->start)) {
         return -1;
     }
     if ($this->start->Month() == $this->end->Month() && $this->start->Year() == $this->end->Year()) {
         $wholeMonth = new Datumsbereich($this->start->FirstOfMonth(), $this->start->LastOfMonth());
         return $this->Length() / $wholeMonth->Length();
     }
     $startMonth = new Datumsbereich($this->start, $this->start->LastOfMonth());
     $wholeMonth = new Datumsbereich($this->start->FirstOfMonth(), $this->start->LastOfMonth());
     $total = $startMonth->Length() / $wholeMonth->Length();
     $between = new Datumsbereich($this->start->NextFirst(), $this->end->PreviousLast());
     $total += round($between->Length() / 30);
     $endMonth = new Datumsbereich($this->end->FirstOfMonth(), $this->end);
     $wholeMonth = new Datumsbereich($this->end->FirstOfMonth(), $this->end->LastOfMonth());
     $total += $endMonth->Length() / $wholeMonth->Length();
     if ($this->start->Day() == $this->end->Day() || $this->end->month() == 2 && $this->end->day() == $this->end->lastOfMonth()->day() && $this->end->day() < $this->start->day()) {
         $total = (int) round($total);
     }
     return $total;
 }
 public function testLength()
 {
     $datumsbereich = new Datumsbereich(new Datum('2008-04-01'), new Datum('2009-04-30'));
     $this->assertEquals(395, $datumsbereich->Length());
     $datumsbereich = new Datumsbereich(new Datum('2008-04-01'), new Datum('2008-04-01'));
     $this->assertEquals(1, $datumsbereich->Length());
     $datumsbereich = new Datumsbereich(new Datum('2008-04-01'));
     $this->assertEquals(-1, $datumsbereich->Length());
     $datumsbereich = new Datumsbereich(new Datum('2008-04-01'), new Datum('2008-03-01'));
     $this->assertEquals(-1, $datumsbereich->Length());
     $datumsbereich = new Datumsbereich(new Datum('2011-01-01'), new Datum('2011-09-30'));
     $this->assertEquals(273, $datumsbereich->Length());
     $datumsbereich = new Datumsbereich(new Datum('2013-03-29'), new Datum('2013-04-01'));
     $this->assertEquals(4, $datumsbereich->Length());
     $datumsbereich = new Datumsbereich(new Datum('2015-04-01'), new Datum('2016-03-31'));
     $this->assertEquals(366, $datumsbereich->Length());
 }