somme d'heures en PHP

somme d'heures en PHP - PHP - Programmation

Marsh Posté le 16-02-2012 à 15:53:02    

Bonjour à tous,
 
Je suis sur Joomla 1.7.
Je viens de réaliser un composant avec COOK qui tourne très bien en version 1.6 // 1.7 et 2.5 de Joomla.
Sur celui-ci j'obtiens un tableau dans lequel des heures sont renseignées.
 
Je souhaite faire la somme de ces heures là pour un individu donné (Joomla user).
Pour ce faire je suis obligé de hacker mon propre composant.
 
Le HIC, c'est ce que je suis plus qu'un newbie en PHP, je ne pratique pas du tout, à part faire des singeries (copier coller).
 
Donc sauriez vous me donner la formule PHP qui executerait la sommes des heures déjà répertoriées dans un tableau.
Ensuite il faudrait également m'indiquer ou copier coller cette formule.
 
Exemple :
 
01:00
01:15
00:45
 
Le format est toujours comme ci-dessus.
 
D'avance merci beaucoup pour votre aide précieuse.
 
ThierryQ

Reply

Marsh Posté le 16-02-2012 à 15:53:02   

Reply

Marsh Posté le 16-02-2012 à 16:30:45    

Essayer

echo date("H:i", strtotime($h1) + strtotime($h2) + strtotime($h3));


 
Voir la doc sur le site officiel : http://fr.php.net/manual/en/function.date.php et http://fr.php.net/manual/en/function.strtotime.php

Reply

Marsh Posté le 16-02-2012 à 17:10:21    

Très bien merci beaucoup pour les adresses.
 
Je vais tenter d'aller voir la doc sur le site officiel.
Pour ce qui concerne la réponse, je dois préciser que le tableau comportera n valeurs.
Puis je écrire :

Code :
  1. echo date("H:i", strtotime($h1) + strtotime($hn));


 
Cordialement,

Reply

Marsh Posté le 17-02-2012 à 11:21:05    

Il me semblait que strtotime attendait :
- soit une valeur de la forme date/heure, ou au minimum, heure, de la forme "hh:mm:ss"
- soit une chaîne de calcul de temps relatif à un timestamp (qui est donc, lui, une date/heure)
 
:??:
 
Il faudrait donc que les données soit du style 00:01:15, je pense, non?
Et la, le code d'olivthill marcherait.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-02-2012 à 11:31:25    

@rufo. Oui, tout à fait. Je n'ai pas testé, et donc, j'ai aussi un doute. Mais la fonction strtotime() semble assez souple, d'après mes souvenirs, et d'après les exemples en commentaires, et peut-être que ça marcherait. Sinon, il suffirait de concaténer avec .":00".
 
@thierryQ. Non, je ne crois pas qu'on puisse écrire echo date("H:i", strtotime($h1) + strtotime($hn));. Je crois qu'il faut faire une boucle. Mon code n'était qu'un exemple simplifié, mais ce ne devrait pas être très compliqué de faire une boucle du genre :

$total_time = strtotime($h[0].":00" );
for ($i = 1; $i < $n; $i++) {
  $total_time = strtotime($h[$i].":00" );
}
echo date("H:i", $total_time);


Message édité par olivthill le 17-02-2012 à 11:32:06
Reply

Marsh Posté le 17-02-2012 à 11:36:58    

Le pb, à mon avis, est que strtotime manipule des dates/heures. Que va t'il se passer si la somme dépasse les 24h?  
Ex :  
17:00:30
08:00:00
 
Lui, s'attend probablement à avoir 25:00:30. Or, strtotime, va passer au jour suivant et il va avoir 01:00:30 :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-02-2012 à 16:56:31    

Voici une fonction addtime :
tu la colle ou tu veux dans le code, au début, à la fin, mais hors d'une fonction.

Code :
  1. // additionne des temps
  2. // entrée :  
  3. // $temps = temps de reference de la forme "00:00:00"
  4. // $hours = nombre d'heures à ajouter
  5. // $minutes = nombre de minutes à ajouter
  6. // $seconds = nombre de secondes à ajouter
  7. // sortie :
  8. // addTime = temps total sous la forme "00:00:00"
  9. function addTime($temps, $hours=0, $minutes=0, $seconds=0)
  10. {
  11. // on split le temps
  12. $temp_string = explode(":", $temps);
  13. $totalHours = $temp_string[0] + $hours;
  14. $totalMinutes = $temp_string[1] + $minutes;
  15. if ( $totalMinutes / 60 > 1) {
  16.  $totalHours = $totalHours + floor($totalMinutes/60);
  17.  $totalMinutes = $totalMinutes % 60;
  18. }
  19. $totalSeconds = $temp_string[2] + $seconds;
  20. if ( $totalSeconds / 60 > 1) {
  21.  $totalMinutes = $totalHours + floor($totalSeconds/60);
  22.  $totalSeconds = $totalSeconds % 60;
  23. }
  24. if( $totalHours < 10 ) {
  25.  $totalHours = "0" . $totalHours;
  26. }
  27. if( $totalMinutes < 10 ) {
  28.  $totalMinutes = "0" . $totalMinutes;
  29. }
  30. if( $totalSeconds < 10 ) {
  31.  $totalSeconds = "0" . $totalSeconds;
  32. }
  33. $myTime = $totalHours . ":" . $totalMinutes . ":" . $totalSeconds;
  34. return $myTime;
  35. }


Cela te permet d'additionner des heures minutes et secondes (optionnel) à un temps voulu de la forme HH:MM:SS.
 
ensuite pour additionner ton tableau je ferais un truc comme ca :

Code :
  1. // calcul du temps de connexion total
  2. $temps_total = "00:00:00";
  3. foreach($nom_de_ton_tableau as $temps_a_ajouter)
  4. {
  5. $time_array = explode(":", $temps_a_ajouter);
  6. $temps_total = addTime($temps_total, $time_array[0], $time_array[1]);
  7. }


A++


Message édité par calvouze le 17-02-2012 à 16:57:11
Reply

Marsh Posté le 17-02-2012 à 21:11:10    

Merci beaucoup calvouze, et merci @ tous ceux qui m'ont répondu.
 
Je vais essayer de coller la fonction addtime quelque part. Je dois trouver le fichier php ad hoc. Je vous tiendrai informés.
 
@ très bientôt.

Reply

Marsh Posté le 20-02-2012 à 17:59:04    

Sinon une autre solution c'est de passer les heures:minutes en minutes, additionner les minuteset a la fin diviser pour reformer des heures:minutes. Quelque chose comme :

 
Code :
  1. $totalmin=0;
  2. foreach ($a as $temps) {  // avec $a = ton tableau
  3.     $arr_temps=explode(':',$temps);
  4.     $totalmin += (60*$arr_temps[0])+$arr_temps[1];
  5. }
  6. echo str_pad(floor($totalmin/60),2,0,STR_PAD_LEFT),':',str_pad($totalmin%60,2,0,STR_PAD_LEFT);


Message édité par Nukolau le 20-02-2012 à 18:08:54
Reply

Marsh Posté le 21-02-2012 à 12:32:35    

Merci nukolau,
 
C'est décidé je me donne un verni PHP. Je viens de commencer PHP sur le site du zero et je compte bien aller jusqu'au bout. Ainsi je comprendrai mieux où insérer ce que vous me transmettez.
 
Je vous remercie pour votre aide.

Reply

Sujets relatifs:

Leave a Replay

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