文字

DatePeriod::__construct

(PHP 5 >= 5.3.0, PHP 7)

DatePeriod::__constructCreates a new DatePeriod object

说明

public DatePeriod::__construct ( DateTimeInterface $start , DateInterval $interval , int $recurrences [, int $options ] )
public DatePeriod::__construct ( DateTimeInterface $start , DateInterval $interval , DateTimeInterface $end [, int $options ] )
public DatePeriod::__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 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_endDatePeriod::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$i1) 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

上一篇: 下一篇: