DatePeriod::__construct

(PHP 5 >= 5.3.0)

DatePeriod::__constructErstellt ein neues DatePeriod Objekt

Beschreibung

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 ] )

Erstellt ein neues DatePeriod Objekt.

Parameter-Liste

start

Das Startdatum der Periode.

interval

Das Intervall zwischen den Wiederholungen in der Periode.

recurrences

Die Anzahl der Wiederholungen.

end

Das Enddatum der Periode.

isostr

Eine ISO 8601 Spezifikation für sich wiederholende Intervalle.

options

Kann auf den Wert DatePeriod::EXCLUDE_START_DATE gesetzt werden, um das Startdatum aus den wiederkehrenden Terminen innnerhalb der Periode auszuschließen.

Changelog

Version Beschreibung
5.5.8 end Typ zu DateTimeImmutable geändert. Zuvor war es DateTime.
5.5.0 start Typ zu DateTimeImmutable geändert. Zuvor war es DateTime.

Beispiele

Beispiel #1 DatePeriod Beispiel

<?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';

// Alle diese Perioden sind gleichwertig.
$period = new DatePeriod($start$interval$recurrences);
$period = new DatePeriod($start$interval$end);
$period = new DatePeriod($iso);

// Durch Iterieren über das DatePeriod Objekt, werden alle sich
// wiederholenden Termine innerhalb der Periode ausgegeben.
foreach ($period as $date) {
    echo 
$date->format('Y-m-d')."\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2012-07-01
2012-07-08
2012-07-15
2012-07-22
2012-07-29

Beispiel #2 DatePeriod Beispiel mit 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);

// Durch Iterieren über das DatePeriod Objekt, werden alle sich
// wiederholenden Termine innerhalb der Periode ausgegeben.
// Es ist zu beachten, dass in diesem Fall 2012-07-01 nicht ausgegeben wird.
foreach ($period as $date) {
    echo 
$date->format('Y-m-d')."\n";
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2012-07-08
2012-07-15
2012-07-22
2012-07-29

add a note add a note

User Contributed Notes 2 notes

up
13
simon dot kohlmeyer at mayflower dot de
4 years ago
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
up
3
lars at hp-designs dot com
3 years ago
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
To Top