Skip to content
Gérits Aurélien edited this page Feb 18, 2026 · 1 revision

DateIntervalTool est une classe utilitaire permettant de manipuler les durées (intervalles) de manière simplifiée et sécurisée. Elle fait office de "Factory" pour créer des objets \DateInterval et de convertisseur pour normaliser ces durées au format standard ISO 8601.

Namespace : Magepattern\Component\Tool\ArrayTool

Méthodes Disponibles

  1. Création d'un intervalle (create) Cette méthode remplace l'instanciation manuelle et capture les erreurs de syntaxe pour éviter de bloquer l'application.

Signature : public static function create(string $duration, string $mode = 'iso'): \DateInterval|false

Mode iso (par défaut) : Utilise le format technique (ex: P1D, PT1H).

Mode human : Utilise le format langage naturel (ex: 2 days, 1 month + 5 days).

use Magepattern\Component\Tool\DateIntervalTool;

// Création format humain
$interval = DateIntervalTool::create('1 week + 3 days', 'human');

// Utilisation
$date = new DateTime();
$date->add($interval);
  1. Conversion en chaîne ISO (toIso) Permet de transformer un objet DateInterval ou la différence entre deux dates en une chaîne normalisée P...T.... C'est le format idéal pour stocker une durée en base de données ou l'échanger via une API.

Signature : public static function toIso(\DateInterval|\DateTimeInterface $input, ?\DateTimeInterface $end = null): string

// Cas A : Convertir un objet existant
$interval = DateIntervalTool::create('2 days', 'human');
echo DateIntervalTool::toIso($interval); // Affiche "P2D"

// Cas B : Calculer l'ISO entre deux dates
$start = new DateTime('2026-01-01');
$end   = new DateTime('2026-01-05 12:00:00');
echo DateIntervalTool::toIso($start, $end); // Affiche "P4DT12H"

Exemples d'utilisation

Calcul de validité d'un jeton (Token)

Si vous devez ajouter une durée de validité stockée en configuration :

$validity = "PT2H"; // 2 heures en ISO
$dateExp = new DateTime();
$dateExp->add(DateIntervalTool::create($validity));

echo "Expire le : " . $dateExp->format('d/m/Y H:i');

Stockage de durée d'abonnement

$debut = new DateTime('2025-01-01');
$fin   = new DateTime('now');

// On stocke la durée consommée au format ISO
$dureeIso = DateIntervalTool::toIso($debut, $fin);
// Ex: "P1Y1M18D"

Gestion des erreurs

Contrairement à la classe native PHP qui lance une exception fatale en cas de format invalide, DateIntervalTool : Intercepte l'exception. Enregistre l'erreur dans le Logger (catégorie php_date). Retourne false, vous permettant de gérer un fallback proprement.

Clone this wiki locally