date_diff / DateInterval în PHP

Dată și oră PHP 5.3+

Calculează diferența dintre două date: ani, luni, zile, ore. Rezultatul este un obiect DateInterval.

Sintaxă
date_diff(DateTimeInterface $baseObject, DateTimeInterface $targetObject, bool $absolute = false): DateInterval

Ce face date_diff / DateInterval

date_diff($a, $b) este forma de funcție pentru $a->diff($b). Returnează un obiect DateInterval, care descrie distanța dintre cele două date.

Proprietăți utile ale DateInterval: y (ani), m (luni), d (zile), h, i, s (ore, minute, secunde), days (numărul total de zile) și invert (1 dacă a doua dată este înaintea primei).

Metoda ->format() folosește marcaje cu %: %y ani, %m luni, %d zile, %a total zile, %h ore, %R semnul (+ sau -).

Parametri

Parametru Descriere
$baseObject Data de pornire.
$targetObject Data cu care se compară.
$absolute Opțional. true pentru ca diferența să fie mereu pozitivă.

Ce returnează

Un obiect DateInterval.

Exemple

Exemplul 1: Vârsta unei persoane

<?php
$nastere = date_create("1998-05-12");
$azi = date_create("2026-10-19");

$varsta = date_diff($nastere, $azi);
echo "Ana are {$varsta->y} de ani.";

Rezultat

Ana are 28 de ani.

Exemplul 2: Total zile și diferența pe bucăți

%d este doar partea de zile rămasă după luni. Pentru numărul total de zile folosește %a sau proprietatea days.

<?php
$inscriere = date_create("2026-01-01");
$azi = date_create("2026-10-19");

$d = $inscriere->diff($azi);
echo $d->format("%m luni și %d zile") . "\n";
echo $d->format("%a zile în total") . "\n";
echo $d->days;

Rezultat

9 luni și 18 zile
291 zile în total
291

Exemplul 3: Date din trecut: semnul diferenței

<?php
$termen = date_create("2026-10-15");
$azi = date_create("2026-10-19");

$d = date_diff($azi, $termen);
echo $d->format("%R%a zile") . "\n";
echo $d->invert ? "Termenul a trecut." : "Mai este timp.";

Rezultat

-4 zile
Termenul a trecut.

Greșeli frecvente

  • Folosești %d pentru numărul total de zile. %d arată doar zilele rămase după ani și luni. Folosește %a.
  • Calculezi zilele împărțind diferența de timestamp-uri la 86400. În zilele de trecere la ora de vară sau de iarnă, o zi are 23 sau 25 de ore, iar rezultatul poate ieși greșit. date_diff ține cont de asta.

Comenzi înrudite

  • date_create / DateTime: Creează un obiect DateTime dintr-un text. Obiectele DateTime și DateTimeImmutable sunt modul modern de a lucra cu date în PHP.
  • strtotime: Transformă o dată scrisă ca text (inclusiv expresii ca „+1 week”) în timestamp.
  • mktime: Construiește timestamp-ul Unix pentru o dată și o oră anume, din ore, minute, secunde, lună, zi și an.