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()); }