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 static function FromDate($year, $month, $day, $timezone, $firstDayOfWeek = 0) { $week = new CalendarWeek($timezone); $date = Date::Create($year, $month, $day, 0, 0, 0, $timezone); $start = $date->Weekday(); if ($firstDayOfWeek == Schedule::Today) { $firstDayOfWeek = 0; } $adjustedDays = $firstDayOfWeek - $start; if ($start < $firstDayOfWeek) { $adjustedDays = $adjustedDays - 7; } $date = $date->AddDays($adjustedDays); for ($i = 0; $i < 7; $i++) { $week->AddDay(new CalendarDay($date->AddDays($i))); } return $week; }
public function Create($type, $year, $month, $day, $timezone, $firstDayOfWeek = 0) { if ($type == CalendarTypes::Day) { return new CalendarDay(Date::Create($year, $month, $day, 0, 0, 0, $timezone)); } if ($type == CalendarTypes::Week) { return CalendarWeek::FromDate($year, $month, $day, $timezone, $firstDayOfWeek); } return new CalendarMonth($month, $year, $timezone); }
public function testWhenFirstDayOfTheWeekIsNotSunday() { $timezone = 'America/Chicago'; $next = Date::Parse('2014-07-14', $timezone); $prev = Date::Parse('2014-06-30', $timezone); $expectedFirstDay = Date::Parse('2014-07-07', $timezone); $expectedLastDay = Date::Parse('2014-07-13', $timezone); $week = CalendarWeek::FromDate(2014, 7, 12, $timezone, 1); $this->assertEquals($expectedFirstDay, $week->FirstDay(), $week->FirstDay()->__toString()); $this->assertEquals($expectedLastDay, $week->LastDay(), $week->LastDay()->__toString()); $this->assertEquals($next, $week->GetNextDate(), $week->GetNextDate()->__toString()); $this->assertEquals($prev, $week->GetPreviousDate(), $week->GetPreviousDate()->__toString()); }