PHP 7.1.24 Released

DatePeriod::__construct

(PHP 5 >= 5.3.0, PHP 7)

DatePeriod::__constructYeni bir DatePeriod nesnesi oluşturur

Açıklama

public DatePeriod::__construct ( DateTimeInterface $başlangıç , DateInterval $aralık , int $tekrarsayısı [, int $seçenekler ] )
public DatePeriod::__construct ( DateTimeInterface $başlangıç , DateInterval $aralık , DateTimeInterface $bitiş [, int $seçenekler ] )
public DatePeriod::__construct ( string $isostr [, int $seçenekler ] )

Yeni bir DatePeriod nesnesi oluşturur.

Değiştirgeler

başlangıç

Dönemin başlangıç tarihi.

aralık

Dönemsel yinelemeler arasındaki boşluk.

tekrarsayısı

Yineleme sayısı.

bitiş

Dönemin bitiş tarihi.

isostr

Bir ISO 8601 tekrarlanan aralık belirtimi.

seçenekler

Başlangıç tarihini, dönem içindeki yinelenen tarihler kümesinden hariç tutmak için DatePeriod::EXCLUDE_START_DATE sabiti kullanılabilir.

Sürüm Bilgisi

Sürüm: Açıklama
5.5.8 bitiş için tür DateTimeInterface oldu. Evvelce, DateTime idi.
5.5.0 başlangıç için tür DateTimeInterface oldu. Evvelce, DateTime idi.

Örnekler

Örnek 1 DatePeriod örneği

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

// Hepsi eşdeğer
$period = new DatePeriod($start$interval$recurrences);
$period = new DatePeriod($start$interval$end);
$period = new DatePeriod($iso);

// DatePeriod nesnesi üzerinde yineleme yaparak 
// yinelenen dönemlerin tarihleri basılabilir.
foreach ($period as $date) {
    echo 
$date->format('Y-m-d')."\n";
}
?>

Yukarıdaki örneğin çıktısı:

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

Örnek 2 DatePeriod::EXCLUDE_START_DATE ile DatePeriod örneği

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

// DatePeriod nesnesi üzerinde yineleme yaparak 
// yinelenen dönemlerin tarihleri basılabilir.
// Bu defa, 2012-07-01 basılmayacak.
foreach ($period as $date) {
    echo 
$date->format('Y-m-d')."\n";
}
?>

Yukarıdaki örneğin çıktısı:

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

Notlar

Unbound numbers of repetitions as specified by ISO 8601 belirtiminin 4.5 "Recurring time interval" bölümünde belirtilen sınırsız sayıda tekrarlama desteklenmemektedir. Yani, isostr için "R/..." çalışmayacağı gibi bitiş için NULL da çalışmayacaktır

add a note add a note

User Contributed Notes 2 notes

up
30
simon dot kohlmeyer at mayflower dot de
8 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
8
lars at hp-designs dot com
6 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