public function __construct(Date $base, $weekStart = Timestamp::WEEKDAY_MONDAY) { $firstDayOfMonth = Date::create($base->getYear() . '-' . $base->getMonth() . '-01'); $lastDayOfMonth = Date::create($base->getYear() . '-' . $base->getMonth() . '-' . date('t', $base->toStamp())); $start = $firstDayOfMonth->getFirstDayOfWeek($weekStart); $end = $lastDayOfMonth->getLastDayOfWeek($weekStart); $this->monthRange = DateRange::create()->lazySet($firstDayOfMonth, $lastDayOfMonth); $this->fullRange = DateRange::create()->lazySet($start, $end); $rawDays = $this->fullRange->split(); $this->fullLength = 0; foreach ($rawDays as $rawDay) { $day = CalendarDay::create($rawDay->toStamp()); if ($this->monthRange->contains($day)) { $day->setOutside(false); } else { $day->setOutside(true); } $this->days[$day->toDate()] = $day; $weekNumber = floor($this->fullLength / 7); if (!isset($this->weeks[$weekNumber])) { $this->weeks[$weekNumber] = CalendarWeek::create(); } $this->weeks[$weekNumber]->addDay($day); ++$this->fullLength; } ++$this->fullLength; }
public function testSleeping() { $calendarDay = CalendarDay::create('1984-03-25')->setOutside(true)->setSelected(false); $serializedDay = serialize($calendarDay); $unserializedDay = unserialize($serializedDay); $this->assertEquals($calendarDay->getDay(), $unserializedDay->getDay()); $this->assertEquals($calendarDay->getMonth(), $unserializedDay->getMonth()); $this->assertEquals($calendarDay->getYear(), $unserializedDay->getYear()); $this->assertEquals($calendarDay->isOutside(), $unserializedDay->isOutside()); $this->assertEquals($calendarDay->isSelected(), $unserializedDay->isSelected()); }