(PHP 5 >= 5.3.0, PHP 7, PHP 8)
DateTimeInterface::diff -- DateTimeImmutable::diff -- DateTime::diff -- date_diff — Retourne la différence entre deux objets DateTime
Style orienté objet
$targetObject
, bool $absolute
= false
): DateInterval$targetObject
, bool $absolute
= false
): DateIntervalStyle procédural
$baseObject
, DateTimeInterface $targetObject
, bool $absolute
= false
): DateIntervalRetourne la différence entre deux objets DateTimeInterface.
datetime
La date à comparer.
absolute
Doit-on forcer l'intervalle à être positif ?
L'objet DateInterval représente la différence entre les deux dates.
Le paramètre absolute
affecte uniquement la propriété
invert
d'un objet DateInterval.
La valeur de retour représente de façon plus détaillé l'intervale de temps
à appliquer sur l'objet original ($this
ou
$originObject
) pour arriver à
$targetObject
. Cette procédure n'est pas toujours
réversible.
La méthode est consciente des changements d'heure d'été et peut donc renvoyer
un intervalle de 24 heures et 30 minutes
, comme dans l'un
des exemples. Si vous souhaitez calculer avec le temps absolu, vous devez
d'abord convertir à la fois $this
/
$baseObject
et $targetObject
en UTC.
Exemple #1 Exemple avec DateTimeImmutable::diff()
Style orienté objet
<?php
$origin = new DateTimeImmutable('2009-10-11');
$target = new DateTimeImmutable('2009-10-13');
$interval = $origin->diff($target);
echo $interval->format('%R%a days');
?>
Style procédural
<?php
$origin = date_create('2009-10-11');
$target = date_create('2009-10-13');
$interval = date_diff($origin, $target);
echo $interval->format('%R%a days');
?>
Les exemples ci-dessus vont afficher :
+2 days
Exemple #2 DateTimeInterface::diff() lors du passage à l'heure d'été
<?php
$originalTime = new DateTimeImmutable("2021-10-30 09:00:00 Europe/London");
$targetTime = new DateTimeImmutable("2021-10-31 08:30:00 Europe/London");
$interval = $originalTime->diff($targetTime);
echo $interval->format("%H:%I:%S (Full days: %a)"), "\n";
?>
L'exemple ci-dessus va afficher :
24:30:00 (Full days: 0)
Exemple #3 Calcul d'intervalle avec DateTimeInterface::diff()
La valeur renvoyée par la méthode est le temps exact qu'il faut pour aller
de $this
à $targetObject
.
La comparaison entre le 1er janvier et le 31 décembre renvoie donc 364 jours
et non 365 (pour les années non bissextiles).
<?php
$originalTime = new DateTimeImmutable("2023-01-01 UTC");
$targetTime = new DateTimeImmutable("2023-12-31 UTC");
$interval = $originalTime->diff($targetTime);
echo "Jours totaux: ", $interval->format("%a"), "\n";
?>
L'exemple ci-dessus va afficher :
Jours totaux: 364
Exemple #4 Comparaison de deux objets DateTime
Note:
Les objets DateTimeImmutable ou DateTime peuvent être comparés en utilisant les opérateurs de comparaison.
<?php
$date1 = new DateTime("now");
$date2 = new DateTime("tomorrow");
var_dump($date1 == $date2);
var_dump($date1 < $date2);
var_dump($date1 > $date2);
?>
L'exemple ci-dessus va afficher :
bool(false) bool(true) bool(false)