Bonjour,

Lorsque je crée un objet DateInterval comme ceci :

$interval = new DateInterval('PT1200S');

J'aimerais pouvoir l'afficher sous la forme : "00:20:00".

Lorsque je fais ça :

echo $interval->format('%H:%I:%S');

J'obtiens : "00:00:1200".

Si quelqu'un peut me dire...

PHP : 8.1.10

3 réponses


Carouge10
Réponse acceptée

Bonjour,
en parcourant les forums , je trouve ceci:

$interval = DateInterval::createFromDateString('1200 seconds');
$d1 = new DateTime();
$d2 = clone $d1;
$d2->add($interval);
$duree = $d1->diff($d2); // $d2 - $d1

echo $duree->format('%H:%i');
crotte
Auteur

Salut Carouge10 et merci pour ta réponse qui fonctionne. Mais je ne comprends pas pourquoi le comportement est différent dans ce cas.

Hello,

Si je me souviens bien DateInterval seul ne normalise pas les valeurs, il stocke les unités telles qu'elles sont définies sans recalculer
Par contre, l'utilisation d'objets DateTime force PHP à normaliser les durées

En espérant t'avoir auguiller sans dire trop de bétîse (ce qui est possible).
N'hesite pas également d'avoir la documentation de PHP pour DateInterval et DateTime quand tu ne comprends pas un fonctionnement.