Page 1 sur 1

DateInterval - Calculer nombre de minutes d’intervalle entre 2 DateTime

Posté : 13 août 2019, 13:42
par stephweb
Bonjour.
Je viens demander de l'aide SVP.
Dans une table de ma BDD, j'ai 2 colonnes de type timestamp : 'date_start' et 'date_end'.
Je souhaite calculer le nombre de minutes exact d'intervalle entre ces 2 dates.

Comment faire ceci précisément SVP ?

Je me suis créé cette function :

Code : Tout sélectionner

<?php public function convertDiffToMinutes($dateStart, $dateEnd): int { $start = new DateTime($dateStart); $end = new DateTime($dateEnd); $interval = $start->diff($end); $yMin = $interval->format("%y") * 525600; // convertir années en minutes $mMin = $interval->format("%m") * 1440 * 31; // convertir mois (en 31 jours) en minutes $dMin = $interval->format("%d") * 1440; // convertir jours en minutes $hMin = $interval->format("%h") * 60; // convertir heures en minutes $iMin = $interval->format("%i"); return $yMin + $mMin + $dMin + $hMin + $iMin; }
Mais le problème est surtout de convertir les mois d'intervalle en minutes d'intervalle, vu qu'on ne peut pas savoir à l'avance si les mois enregistrés dans BDD seront un mois à 28 ou à 31 jours...
Et les valeurs enregistrés dans 'date_start' et 'date_end' peuvent avoir un mois différent l'une de l'autre, une année différente l'une de l'autre...

Avez-vous une solution propre à me conseiller SVP ?

Merci beaucoup.

Re: DateInterval - Calculer nombre de minutes d’intervalle entre 2 DateTime

Posté : 13 août 2019, 14:11
par or 1

Re: DateInterval - Calculer nombre de minutes d’intervalle entre 2 DateTime

Posté : 13 août 2019, 14:47
par Spols
c'est bien la fonction qu'il utilise,

format ta date avec %a tu aura le nombre totale de jour que tu peux transformer en minutes ensuite pour les heures et les minutes tu as dèjà compris comment faire.

Re: DateInterval - Calculer nombre de minutes d’intervalle entre 2 DateTime

Posté : 13 août 2019, 14:58
par or 1
oups

Re: DateInterval - Calculer nombre de minutes d’intervalle entre 2 DateTime

Posté : 13 août 2019, 15:00
par stephweb
Merci à tous pour vos réponses.
format ta date avec %a tu aura le nombre totale de jour que tu peux transformer en minutes ensuite pour les heures et les minutes tu as dèjà compris comment faire.
Merci !

Ce qui donne ça :

Code : Tout sélectionner

/** * Retourner nombre d'heures d'intervale entre 2 dates */ public static function getHoursIntervalBetweenTwoDates(string $start, string $end): int { $dateStart = new DateTime($start); $dateEnd = new DateTime($end); $interval = $dateStart->diff($dateEnd); $hours = $interval->format('%a') * 24; $hours += $interval->format('%h'); return $hours; } /** * Retourner nombre de minutes d'intervale entre 2 dates */ public static function getMinutesIntervalBetweenTwoDates(string $start, string $end): int { $dateStart = new DateTime($start); $dateEnd = new DateTime($end); $interval = $dateStart->diff($dateEnd); $minutes = $interval->format('%a') * 24 * 60; $minutes += $interval->format('%h') * 60; $minutes += $interval->format('%i'); return $minutes; }
Et ça marche.

Au lieu de faire ceci : $interval->format('%a')
On peut aussi faire ceci (sauf que la ça nous retourne un int au lieu d'un string) : $interval->days

Sujet résolu, merci.