dums24 | Bonjour tout le monde!!
Aprés avoir parcouru des dizaines de forums je ne trouvai aucune fonction me permettant de faire des calcul de durer en php à partir de deux dates, suite au sujet http://forum.hardware.fr/hardwaref [...] 9104-1.htm, cela m'a donné l'idée de créer une fonction sur les dates, je vous propose donc de la commenter, donnez moi vos points devue afin de l'optimiser...
Code :
- /***********************************************************************************************/
- /*Fonction permettant de connaitre les resultats d'opération entre 2 dates */
- /* -> $operation : si Addition alors additionne les dates sinon les soustrait */
- /* -> $debut $fin : doivent avoir une structure identiques Y-m-d H:i:s */
- /* <- $resultatCalcul : retourne un resultat H:i:s (H peut etre sup à 23) */
- /* Powered by dum's */
- /***********************************************************************************************/
- function operationDate($operation,$debut,$fin)
- {
- /*division des dates et heures*/
- $date = explode(" ", $debut);
- $heureDeb = explode(":", $date[1]);
- $dateDeb = explode("-", $date[0]);
- $date = explode(" ", $fin);
- $heureFin = explode(":", $date[1]);
- $dateFin = explode("-", $date[0]);
- //recuperation du timestamp de la date
- $timeStampDep = mktime("00", "00", "00", $dateDeb[1], $dateDeb[2], $dateDeb[0]);
- $timeStampDeb = mktime($heureDeb[0], $heureDeb[1], $heureDeb[2], $dateDeb[1], $dateDeb[2], $dateDeb[0]);
- $timeStampFin = mktime($heureFin[0], $heureFin[1], $heureFin[2], $dateFin[1], $dateFin[2], $dateFin[0]);
- //verification du type d'opération
- if($operation=="Addition" )
- $resultat = $timeStampFin + $timeStampDeb - 2*$timeStampDep;
- else
- {
- //verifie l'anteriorite de la date fin
- if($timeStampFin>=$timeStampDeb)
- $resultat = $timeStampFin - $timeStampDeb;
- else
- $resultat = $timeStampDeb - $timeStampFin;
- }
- //calcul du nombre de jours
- $residu = $resultat % 86400;
- $nbJours = floor(($resultat - $residu) / 86400);
- //calcul du nombre d'heures
- $resultat = $residu;
- $residu = $resultat % 3600;
- $nbHeures = floor(($resultat - $residu) / 3600);
- //calcul du nombre de minutes
- $resultat = $residu;
- $residu = $resultat % 60;
- $nbMinutes = floor(($resultat - $residu) / 60);
- //nombre de secondes
- $nbSecondes = $residu;
- //formation du resultat final
- $nbHeures+=24*$nbJours;
- if($nbHeures<10)
- $nbHeures="0".$nbHeures;
- if($nbMinutes<10)
- $nbMinutes="0".$nbMinutes;
- if($nbSecondes<10)
- $nbSecondes="0".$nbSecondes;
- $resultatCalcul=$nbHeures.":".$nbMinutes.":".$nbSecondes;
- return $resultatCalcul;
- }
|
Pour utiliser cette fonction, il vous suffit de la copier dans votre fichier php, puis pour l'utiliser il vous suffit de l'utiliser comme cela :
Code :
- $date1="2005-07-19 14:00:00";
- $date2="2005-07-19 15:00:00";
- $resultat=operationDate("Addition",$date1,$date2);
- echo "Mon resultat est : ".$resultat; // affiche : Mon resultat est : 29:00:00
|
Pour le cas ou on a un volume horaire depassant la journée on increment le nombre de jour...
cas ou nous avons 50h ($date1) a additionner a 15h00($date2)
Code :
- $date1="2005-07-21 02:00:00"; //50 heures
- $date2="2005-07-19 15:00:00"; //15 heures
- //la plus petite date est prise en point de depart ici 2005-07-19
- $resultat=operationDate("Addition",$date1,$date2);
- echo "Mon resultat est : ".$resultat; // affiche : Mon resultat est : 65:00:00
|
Concernant la soustraction, voici le resultat :
Code :
- $date1="2005-07-21 02:00:00"; //50 heures
- $date2="2005-07-19 15:00:00"; //15 heures
- $resultat=operationDate("Soustraction",$date1,$date2);
- echo "Mon resultat est : ".$resultat; // affiche : Mon resultat est : 35:00:00
|
Pour ces deux calculs, le résultat est calculé de façon a ce qu'il ne soit jamais négatif.
Voili, voilou... Message édité par dums24 le 19-07-2005 à 14:41:05 ---------------
Dums - La loi Murphy... une loi bien réelle dans le monde virtuel... - Eleveur de vaches
|