©
本文檔使用 php中文網手册 發布
(PHP 5 >= 5.3.0, PHP 7)
DatePeriod::__construct — Creates a new DatePeriod object
$start
, DateInterval $interval
, int $recurrences
[, int $options
] )$start
, DateInterval $interval
, DateTimeInterface $end
[, int $options
] )$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 | end type changed to
DateTimeImmutable .
Previously, DateTime.
|
5.5.0 | start type changed to
DateTimeImmutable .
Previously, DateTime.
|
Example #1 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
Example #2 DatePeriod example with DatePeriod::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
[#1] lars at hp-designs dot com [2012-08-07 05:02:13]
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
[#2] simon dot kohlmeyer at mayflower dot de [2010-11-03 03:50:57]
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