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

Avatar du membre
Eléphant du PHP | 88 Messages

13 août 2019, 13:42

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.

Mammouth du PHP | 2703 Messages

13 août 2019, 14:11


Mammouth du PHP | 1967 Messages

13 août 2019, 14:47

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.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 2703 Messages

13 août 2019, 14:58

oups

Avatar du membre
Eléphant du PHP | 88 Messages

13 août 2019, 15:00

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.