DatePeriod::__construct

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

DatePeriod::__constructYeni bir DatePeriod nesnesi oluşturur

Açıklama

public DatePeriod::__construct(DateTimeInterface $start, DateInterval $interval, int $recurrences, int $options = 0)
public DatePeriod::__construct(DateTimeInterface $start, DateInterval $interval, DateTimeInterface $end, int $options = 0)
public DatePeriod::__construct(string $isostr, int $options = 0)

Yeni bir DatePeriod nesnesi oluşturur.

Değiştirgeler

start

Dönemin başlangıç tarihi.

interval

Dönemsel yinelemeler arasındaki boşluk.

recurrences

Yineleme sayısı. 0'dan büyük olmalıdır.

end

Dönemin bitiş tarihi.

isostr

» ISO 8601 tekrarlanan aralık belirtimi. Sıfırlı gösterimler (R0/) desteklenmez.

options

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
7.2.19, 7.3.6, 7.4.0 recurrences artık 0'dan büyük olmak zorunda.

Ö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

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 end için null da çalışmayacaktır

add a note add a note

User Contributed Notes 3 notes

up
34
simon dot kohlmeyer at mayflower dot de
13 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
14
lars at hp-designs dot com
11 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
up
0
youssef dot benhssaien at gmail dot com
4 years ago
The parameter isostr should accept an ISO 8601 format, but doing this is not work :
<?php
      $dateStart
= date_create('first day of next month this year');

     
$isoStr = $dateStart ->format(DateTimeInterface::ISO8601);
     
$datePeriod = new DatePeriod("R10/{$isoStr}/P1M");
    
// Throw Exception : DatePeriod::__construct(): Unknown or bad format (R10/2020-02-01T22:52:26+0000Z/P1M)
    
     // While doing it by this way works
   
$datePeriod = new DatePeriod($dateStart , \DateInterval::createFromDateString("+1 month"), 10);
?>
To Top