Conversion objet DateInterval en secondes en php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
Comment puis-je convertir ce qui précède $interval
pour les secondes en php
3 réponses
Il existe une fonction format
pour cela. Mais il ne retournera pas le nombre de secondes. Pour obtenir le nombre de secondes vous utilisez cette technique
$seconds = abs($datetime1->getTimestamp()-$datetime2->getTimestamp());
Si vous voulez vraiment utiliser $interval
vous devez le calculer.
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
Ici
86400
est le nombre de secondes dans un jour3600
est le nombre de secondes dans une heure60
est le nombre de secondes dans une minute
une autre façon d'obtenir le nombre de secondes dans un intervalle est de l'ajouter à la date zéro, et d'obtenir l'horodatage de cette date:
$seconds = date_create('@0')->add($interval)->getTimestamp();
cette méthode gère plus ou moins correctement les intervalles créés via le contructeur DateInterval, alors que réponse de shiplu ne tiendra pas compte des années, des mois et des jours pour de tels intervalles. Toutefois, la réponse de shiplu est plus précise pour les intervalles qui ont été créés en soustrayant deux dates. Pour des intervalles ne comportant que des heures, minutes et secondes, les deux méthodes obtiendront la bonne réponse.
je tiens seulement à ajouter à réponse de shiplu:
function dateIntervalToSeconds($interval)
{
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
return $interval->invert == 1 ? $seconds*(-1) : $seconds;
}
pour gérer les intervalles négatifs.
notez que-contrairement à réponse de Brilliand - le code ci-dessus tiendra compte correctement des années, des mois et des dates. Parce que $ interval - >days est une valeur absolue ($interval->d est relatif au mois).
EDIT: cette fonction est toujours pas correct, comme le souligne @Brilliand. Un contre-exemple est
new DateInterval('P4M3DT2H');
Il ne gère pas les mois.