business\Business::timeline PHP Метод

timeline() публичный Метод

public timeline ( DateTime $start, DateTime $end, DateInterval $interval )
$start DateTime
$end DateTime
$interval DateInterval
    public function timeline(\DateTime $start, \DateTime $end, \DateInterval $interval)
    {
        if ($start >= $end) {
            throw new \LogicException('The start date must be before the end date.');
        }
        $tmpStart = clone $start;
        $tmpStart->setTimezone($this->timezone);
        $tmpEnd = clone $end;
        $tmpEnd->setTimezone($this->timezone);
        $dates = [];
        $lastDate = $tmpStart;
        while (true) {
            $date = $this->getClosestDateAfter($lastDate);
            if ($date > $tmpEnd) {
                break;
            }
            $dates[] = $date;
            $lastDate = clone $date;
            $lastDate->add($interval);
        }
        return $dates;
    }

Usage Example

Пример #1
0
 public function testTimelineCustomTimezone()
 {
     $tz = date_default_timezone_get();
     date_default_timezone_set('Europe/Paris');
     $business = new Business([new Day(Days::MONDAY, [['09:00', '13:00'], ['14:00', '17:00']]), new SpecialDay(Days::FRIDAY, function (\DateTime $date) {
         return [['10:00', '13:00'], ['14:00', '17:00']];
     })]);
     // Monday "2015-05-25 10:00:00" in Europe/Paris
     $start = new \DateTime('2015-05-24 22:00', new \DateTimeZone('Pacific/Tahiti'));
     $end = new \DateTime('2015-05-25 17:00');
     $dates = $business->timeline($start, $end, new \DateInterval('PT1H'));
     $this->assertEquals('2015-05-25 10:00', $dates[0]->format('Y-m-d H:i'));
     $this->assertEquals('2015-05-25 11:00', $dates[1]->format('Y-m-d H:i'));
     $this->assertEquals('2015-05-25 12:00', $dates[2]->format('Y-m-d H:i'));
     $this->assertEquals('2015-05-25 13:00', $dates[3]->format('Y-m-d H:i'));
     $this->assertEquals('2015-05-25 14:00', $dates[4]->format('Y-m-d H:i'));
     $this->assertEquals('2015-05-25 15:00', $dates[5]->format('Y-m-d H:i'));
     $this->assertEquals('2015-05-25 16:00', $dates[6]->format('Y-m-d H:i'));
     $this->assertEquals('2015-05-25 17:00', $dates[7]->format('Y-m-d H:i'));
     date_default_timezone_set($tz);
 }