DateInterval sınıfı

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

Giriş

Bir tarih aralığı gösterir.

Ya sabit bir süre (yıl, ay, gün saat sayısı gibi) ya da DateTimeImmutable ve DateTime kurucusunun desteklediği biçemde göreli bir zaman dizgesi saklanır.

Daha açıkçası, bir DateInterval nesnesindeki bilgiler, bir tarih/saatten başka bir tarih/saate gitme talimatıdır. Bu işlem her zaman tersine çevrilebilir değildir.

DateInterval nesnesi oluşturmanın yaygın yolu, DateTimeInterface::diff() aracılığıyla iki tarih/saat nesnesi arasındaki farkı hesaplamaktır.

Tarih aralıklarını karşılaştırmak için uygun bir yöntem bulunmadığından DateInterval örneklerinin eşsiz olduğu varsayılır.

Sınıf Sözdizimi

class DateInterval {
/* Özellikler */
public int $y;
public int $m;
public int $d;
public int $h;
public int $i;
public int $s;
public float $f;
public int $invert;
public mixed $days;
/* Yöntemler */
public __construct(string $duration)
public format(string $biçem): string
}

Özellikler

Uyarı

Aşağıda sıralanmış özellikler PHP sürümüne bağlı olup salt-okunur olarak ele alınmalıdır.

y

Yıl sayısı.

m

Ay sayısı.

d

Gün sayısı.

h

Saat sayısı.

i

Dakika sayısı.

s

Saniye sayısı.

f

Saniyenin kesri olarak mikrosaniye.

invert

Zaman aralığı negatifse 1 değilse 0 Bakınız: DateInterval::format().

days

DateInterval nesnesi DateTimeImmutable::diff() veya DateTime::diff() tarafından oluşturulmuşsa, başlangıç ve son tarihler arasındaki toplam tam gün sayısıdır. Aksi takdirde, days false'dır.

from_string

DateInterval nesnesi DateInterval::createFromDateString() tarafından oluşturulmuşsa, özelliğin değeri true olur ve date_string özelliği oluşturulur. Aksi takdirde değer false olur ve y'den f'ye kadar özellikler ile invert ve days özellikleri oluşturulur.

date_string

Dizge DateInterval::createFromDateString() için bir bağımsız değişken olarak kullanılır.

Sürüm Bilgisi

Sürüm: Açıklama
8.2.0 DateInterval::createFromDateString() yöntemiyle oluşturulan DateInterval nesneleri için from_string ve date_string özellikleri eklendi.
8.2.0 Yalnızca y'den f'ye kadar, invert ve days görünür olacaktır.
7.4.0 Artık, DateInterval örneklerinin eşsiz olduğu varsayılıyor; evvelce tüm DateInterval örneklerinin eşit olduğu varsayılırdı.
7.1.0 f özelliği eklendi.

İçindekiler

add a note

User Contributed Notes 4 notes

up
40
cb
1 year ago
If you want to reverse a date interval use array_reverse and iterator_to_array. I've found using invert to be unreliable.

<?php
$start_date
= date_create("2021-01-01");
$end_date = date_create("2021-01-05"); // If you want to include this date, add 1 day

$interval = DateInterval::createFromDateString('1 day');
$daterange = new DatePeriod($start_date, $interval ,$end_date);

function
show_dates ($dr) {
foreach(
$dr as $date1){
echo
$date1->format('Y-m-d').'<br>';
}
}

show_dates ($daterange);

echo
'<br>';

// reverse the array

$daterange = array_reverse(iterator_to_array($daterange));

show_dates ($daterange);

?>

Gives
2021-01-01
2021-01-02
2021-01-03
2021-01-04

2021-01-04
2021-01-03
2021-01-02
2021-01-01
up
5
julio dot necronomicon at gmail dot com
8 months ago
More simple example i use to add or subtract.

<?php
$Datetime
= new Datetime('NOW', new DateTimeZone('America/Bahia'));
$Datetime->add(DateInterval::createFromDateString('2 day'));

echo
$Datetime->format("Y-m-d H:i:s");
?>
up
0
edgaras at levinson dot lt
2 months ago
There is a handy way to compare intervals by adding them to 0 dates and comparing dates instead

<?php

function compare(DateInterval $first, DateInterval $second): int
{
$firstDate = (new DateTime())->setTimestamp(0)->add($first);
$secondDate = (new DateTime())->setTimestamp(0)->add($second);

return
$firstDate <=> $secondDate;
}

echo
compare(new DateInterval('P2D'), new DateInterval('PT48H')) . PHP_EOL;
echo
compare(DateInterval::createFromDateString('2 days'), DateInterval::createFromDateString('48 hours')) . PHP_EOL;
echo
compare(DateInterval::createFromDateString('2 days'), DateInterval::createFromDateString('49 hours')) . PHP_EOL;
echo
compare(DateInterval::createFromDateString('2 days'), DateInterval::createFromDateString('47 hours')) . PHP_EOL;

?>

Outputs:
0
0
-1
1
up
-5
nateb at gurutechnologies dot net
4 years ago
Many people have commented on doing a reverse interval on a date time. I personally find a backwards year to be a little strange to think about and instead opt to work with just intervals. This is the easiest I have found.

<?php
$one_year
= new DateInterval('P1Y');
$one_year_ago = new DateTime();
$one_year_ago->sub($one_year);
?>

Instead of:

<?php
$one_year_ago
= new DateInterval( "P1Y" );
$one_year_ago->invert = 1;
$one_year_ago = new DateTime();
$one_year_ago->add($one_year);
?>
To Top