/** * @return DatePeriodDateTime[] */ protected function getPeriods() { if (!$this->periods) { foreach ($this->period as $datetime) { $start = new DateTime($datetime); $end = (clone $start)->add($this->period->getDateInterval()); // we truncate end date to end date of period if needed if ($end->getTimestamp() > $this->period->getEndDate()->getTimestamp()) { $end = new DateTime($this->period->getEndDate()); } $this->periods[] = new DatePeriodDateTime($start, $end); } // we remove end date if needed if ($this->includeEndDate == false && $this->periods[sizeof($this->periods) - 1]->getEndDate()->getTimestamp() == $this->period->getEndDate()->getTimestamp()) { array_pop($this->periods); } } return $this->periods; }
/** * @param DatePeriod $period * @param ItemInterface[] $items * @param $xFormat * @param $yFormat * @return array */ public static function composeGrid(DatePeriod $period, $items, $xFormat, $yFormat) { $grid = []; /** @var DateTime $date */ foreach ($period as $date) { $nextDate = clone $date; $nextDate->add($period->getDateInterval()); $cell = new GridCell($date); foreach ($items as $item) { $ts = (int) $item->getTimestamp(); if ($ts >= $date->getTimestamp() && $ts < $nextDate->getTimestamp()) { $cell->addItem($item); } } $grid[$date->format($xFormat)][$date->format($yFormat)] = $cell; } return $grid; }
<?php $period = new DatePeriod(new DateTime("2015-01-01"), new DateInterval("PT6H"), new DateTime("2015-01-02")); $period->getStartDate()->modify("+7 days"); // Make sure we got clone right $period->getEndDate()->modify("+7 days"); echo 'Starting Date = ', $period->getStartDate()->format('Y-m-d'), PHP_EOL; echo 'Ending Date = ', $period->getEndDate()->format('Y-m-d'), PHP_EOL; echo 'Interval = ', $period->getDateInterval()->format('%H hours'), PHP_EOL;
<?php $start = new DateTime('2000-01-01 00:00:00', new DateTimeZone('Europe/Berlin')); $end = new DateTime('2000-01-31 00:00:00', new DateTimeZone('UTC')); $interval = new DateInterval('P1D'); $period = new DatePeriod($start, $interval, $end); var_dump($period->getStartDate()->format('Y-m-d H:i:s')); var_dump($period->getStartDate()->getTimeZone()->getName()); var_dump($period->getEndDate()->format('Y-m-d H:i:s')); var_dump($period->getEndDate()->getTimeZone()->getName()); var_dump($period->getDateInterval()->format('%R%y-%m-%d-%h-%i-%s'));