operation sur les dates en php

operation sur les dates en php - PHP - Programmation

Marsh Posté le 19-07-2005 à 14:32:15    

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 :
  1. /***********************************************************************************************/
  2. /*Fonction permettant de connaitre les resultats d'opération entre 2 dates                     */
  3. /* -> $operation        : si Addition alors additionne les dates sinon les soustrait           */
  4. /* -> $debut $fin       : doivent avoir une structure identiques Y-m-d H:i:s                   */
  5. /* <- $resultatCalcul   : retourne un resultat H:i:s         (H peut etre sup à 23)            */
  6. /*                          Powered by dum's                                                   */
  7. /***********************************************************************************************/
  8. function operationDate($operation,$debut,$fin)
  9. {
  10. /*division des dates et heures*/
  11. $date = explode(" ", $debut);
  12. $heureDeb = explode(":", $date[1]);
  13. $dateDeb = explode("-", $date[0]);
  14. $date = explode(" ", $fin);
  15. $heureFin = explode(":", $date[1]);
  16. $dateFin = explode("-", $date[0]);
  17. //recuperation du timestamp de la date
  18. $timeStampDep = mktime("00", "00", "00", $dateDeb[1], $dateDeb[2], $dateDeb[0]);
  19. $timeStampDeb = mktime($heureDeb[0], $heureDeb[1], $heureDeb[2], $dateDeb[1], $dateDeb[2], $dateDeb[0]);
  20. $timeStampFin = mktime($heureFin[0], $heureFin[1], $heureFin[2], $dateFin[1], $dateFin[2], $dateFin[0]);
  21. //verification du type d'opération
  22. if($operation=="Addition" )
  23.  $resultat = $timeStampFin + $timeStampDeb - 2*$timeStampDep;
  24. else
  25. {
  26.  //verifie l'anteriorite de la date fin
  27.  if($timeStampFin>=$timeStampDeb)
  28.   $resultat = $timeStampFin - $timeStampDeb;
  29.  else
  30.   $resultat = $timeStampDeb - $timeStampFin;
  31. }
  32. //calcul du nombre de jours
  33. $residu = $resultat % 86400;
  34. $nbJours = floor(($resultat - $residu) / 86400);
  35. //calcul du nombre d'heures  
  36. $resultat = $residu;
  37. $residu = $resultat % 3600;
  38. $nbHeures = floor(($resultat - $residu) / 3600);
  39. //calcul du nombre de minutes
  40. $resultat = $residu;
  41. $residu = $resultat % 60;
  42. $nbMinutes = floor(($resultat - $residu) / 60);
  43. //nombre de secondes
  44. $nbSecondes = $residu;
  45. //formation du resultat final
  46. $nbHeures+=24*$nbJours;
  47. if($nbHeures<10)
  48.  $nbHeures="0".$nbHeures;
  49. if($nbMinutes<10)
  50.  $nbMinutes="0".$nbMinutes;
  51. if($nbSecondes<10)
  52.  $nbSecondes="0".$nbSecondes;
  53. $resultatCalcul=$nbHeures.":".$nbMinutes.":".$nbSecondes;
  54. return $resultatCalcul;
  55. }


 
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 :
  1. $date1="2005-07-19 14:00:00";
  2. $date2="2005-07-19 15:00:00";
  3. $resultat=operationDate("Addition",$date1,$date2);
  4. 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 :
  1. $date1="2005-07-21 02:00:00";   //50 heures
  2. $date2="2005-07-19 15:00:00";   //15 heures
  3. //la plus petite date est prise en point de depart ici 2005-07-19
  4. $resultat=operationDate("Addition",$date1,$date2);
  5. echo "Mon resultat est : ".$resultat;          // affiche : Mon resultat est : 65:00:00


Concernant la soustraction, voici le resultat :

Code :
  1. $date1="2005-07-21 02:00:00";   //50 heures
  2. $date2="2005-07-19 15:00:00";   //15 heures
  3. $resultat=operationDate("Soustraction",$date1,$date2);
  4. 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
Reply

Marsh Posté le 19-07-2005 à 14:32:15   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed