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;
 }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
 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());
 }