/** * @depends testForeach */ public function testGetStatusInvalid() { $start = new \DateTime('2014-12-31'); $interval = \DateInterval::createFromDateString('first monday of next month'); $end = new DateTime('2014-12-31'); $period = new DatePeriod($start, $interval, $end); $this->assertEquals(DatePeriod::STATUS_INVALID, $period->getStatus(new DateTime('2014-01-01'))); $this->assertEquals(DatePeriod::STATUS_INVALID, $period->getStatus(new DateTime('2014-06-02'))); $this->assertEquals(DatePeriod::STATUS_INVALID, $period->getStatus(new DateTime('2014-06-18'))); $this->assertEquals(DatePeriod::STATUS_INVALID, $period->getStatus(new DateTime('2014-12-31'))); }
public function __construct(\DateTime $start, $interval, $end) { if (!$interval instanceof \DateInterval) { $interval = new \DateInterval("P{$interval}D"); } if (!$end instanceof \DateTime) { $recurrences = $end; $end = clone $start; for ($i = 0; $i <= $recurrences; $i++) { $end = $end->add($interval); } } $this->start = $start; $this->end = $end; $this->interval = $interval; parent::__construct($start, $interval, $end); }
<?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'));