DatePeriod::__construct()
(PHP 5 >= 5.3.0, PHP 7)
Creates a new DatePeriod object
说明
publicDatePeriod::__construct(DateTimeInterface$start,DateInterval$interval,int $recurrences[,int $options])publicDatePeriod::__construct(DateTimeInterface$start,DateInterval$interval,DateTimeInterface$end[,int $options])publicDatePeriod::__construct(string $isostr[,int $options])Creates a new DatePeriod object.
参数
- $start
The start date of the period.
- $interval
The interval between recurrences within the period.
- $recurrences
The number of recurrences.
- $end
The end date of the period.
- $isostr
An ISO 8601 repeating interval specification.
- $options
Can be set to
DatePeriod::EXCLUDE_START_DATE
to exclude the start date from the set of recurring dates within the period.
更新日志
版本 | 说明 |
---|---|
5.5.8 | $endtype changed toDateTimeInterface. Previously,DateTime. |
5.5.0 | $starttype changed toDateTimeInterface. Previously,DateTime. |
范例
DatePeriod example
<?php $start = new DateTime('2012-07-01'); $interval = new DateInterval('P7D'); $end = new DateTime('2012-07-31'); $recurrences = 4; $iso = 'R4/2012-07-01T00:00:00Z/P7D'; // All of these periods are equivalent. $period = new DatePeriod($start, $interval, $recurrences); $period = new DatePeriod($start, $interval, $end); $period = new DatePeriod($iso); // By iterating over the DatePeriod object, all of the // recurring dates within that period are printed. foreach ($period as $date) { echo $date->format('Y-m-d')."\n"; } ?>
以上例程会输出:
2012-07-01 2012-07-08 2012-07-15 2012-07-22 2012-07-29
DatePeriod example withDatePeriod::EXCLUDE_START_DATE
<?php $start = new DateTime('2012-07-01'); $interval = new DateInterval('P7D'); $end = new DateTime('2012-07-31'); $period = new DatePeriod($start, $interval, $end, DatePeriod::EXCLUDE_START_DATE); // By iterating over the DatePeriod object, all of the // recurring dates within that period are printed. // Note that, in this case, 2012-07-01 is not printed. foreach ($period as $date) { echo $date->format('Y-m-d')."\n"; } ?>
以上例程会输出:
2012-07-08 2012-07-15 2012-07-22 2012-07-29
注释
Unbound numbers of repetitions as specified by ISO 8601 section 4.5 "Recurring time interval" are not supported, i.e. neither passing"R/..."as$isostrnor passingNULL
as$endwould work.
I found two things useful to know that aren't covered here. 1. endDate is excluded: <?php $i = new DateInterval('P1D'); $d1 = new Datetime(); $d2 = clone $d1; $d2->add($i); foreach(new DatePeriod($d1, $i, $d2) as $d) { echo $d->format('Y-m-d H:i:s') . "\n"; } ?> Will output: 2010-11-03 12:39:53 (Another one because I got it wrong at first) 2. For the first form, recurrences really means REcurrences, not occurences. <?php $i = new DateInterval('P1D'); $d = new Datetime(); foreach(new DatePeriod($d, $i, 1) as $d) { echo $d->format('Y-m-d H:i:s') . "\n"; } ?> Will output: 2010-11-03 12:41:05 2010-11-04 12:41:05
When you add the time 23:59:59 to the end DateTime object something like the following then the end date will be included in the period: <?php $date_start = new DateTime('2012-03-12'); $date_end = new DateTime('2012-03-22 23:59:59'); $interval = '+2 days'; $date_interval = DateInterval::createFromDateString($interval); $period = new DatePeriod($date_start, $date_interval, $date_end, DatePeriod::EXCLUDE_START_DATE); foreach($period as $dt) { echo $dt->format('d/m'); } ?> OUTPUT: 14/03 16/03 18/03 20/03 22/03