Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1614 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  somme d'heures en PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

somme d'heures en PHP

n°2126836
thierryQ
Posté le 16-02-2012 à 15:53:02  profilanswer
 

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

mood
Publicité
Posté le 16-02-2012 à 15:53:02  profilanswer
 

n°2126846
olivthill
Posté le 16-02-2012 à 16:30:45  profilanswer
 

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

n°2126850
thierryQ
Posté le 16-02-2012 à 17:10:21  profilanswer
 

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,

n°2126918
rufo
Pas me confondre avec Lycos!
Posté le 17-02-2012 à 11:21:05  profilanswer
 

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
n°2126923
olivthill
Posté le 17-02-2012 à 11:31:25  profilanswer
 

@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
n°2126924
rufo
Pas me confondre avec Lycos!
Posté le 17-02-2012 à 11:36:58  profilanswer
 

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
n°2126970
calvouze
Posté le 17-02-2012 à 16:56:31  profilanswer
 

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
n°2126988
thierryQ
Posté le 17-02-2012 à 21:11:10  profilanswer
 

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.

n°2127349
Nukolau
Posté le 20-02-2012 à 17:59:04  profilanswer
 

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
n°2127510
thierryQ
Posté le 21-02-2012 à 12:32:35  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  somme d'heures en PHP

 

Sujets relatifs
Extraction Liste PhP - ExcelCompte à rebour en PHP (if/else) pour masquer lien
[PHP/CSS] Acheter un thème wordpress pour s'en inspirer[PHP] Trouver le décallage horaire du "systeme"
PHP hidden variable $_POST MYSQL[HTML/PHP] Page d'accueil dynamique wordpress
SQL PHP Moteur De Recherchepb de connexion SQL/ODBC via PHP
executer du R avec PHPappliquer une police à une page PHP
Plus de sujets relatifs à : somme d'heures en PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR