addition durées

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : addition durées

par DarkBlue » 25 avr. 2005, 23:52

merci pjl je me sentais pas compris !

par gregood2000 » 22 avr. 2005, 15:01

dsl pas vue que c etait un du type HH:MM:SS penser que c etait srt*. on ma dit une fois etre juger c est ce juger. a+

par pjl » 21 avr. 2005, 14:16

Visiblement la réponse de DarkBlue n'a pas été lue. :roll:

ALors pour éviter les usines à gaz (pour ceux qui ne sont pas payés à la ligne de code), ca tient en une et une seule requête SQL et celà sans avoir besoin de faire la moindre modif dans sa base de données :

Code : Tout sélectionner

SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( heure ) ) ) FROM `test`
Attention au format du champ. Ca marche très bien avec un champ au format TIME, ca donne un résultat complètement faux avec un champ au format TIMESTAMP. Au format DATE, ca donne 0 et au format DATETIME, le calcul ignore les jours, mois et années.
Et la réponse se trouvait dans la doc. :roll:
http://www.nexen.net/docs/mysql/annotee ... ?lien=date

par gregood2000 » 20 avr. 2005, 12:31

vloila un de but de solution [php]
// si chaine
$row[0]='00:02:56';
$row[1]='00:00:23';
$row[2]='00:01:16';
$row[3]='00:00:04';
//01:34:67
$t = 0;

for ( $i =0 ; $i < count($row); $i++) {
$t += (($row[$i][0] . $row[$i][1]) * 3600) +(( $row[$i][3] . $row[$i][4]) * 60) + ($row[$i][6] . $row[$i][7] );

//ou avec un explose explode(':' + $row)
}

// affichage methode 1
// nota si plus de 24H mache plus cette funcion
print strftime('%H:%M:%S', $t-3600);
// pour passe les +24h
// ou methode2
print '<br>';

print ( ( $H = (int) abs( ($t/ 3600)) ) == 0 ? '00:' : ( $H <10 ? ( '0' . $H . ':' ) : ($H . ':') ) );
print ( ( $M = (int) abs( ( ($H*3600 - $t) / 60 )) ) == 0 ? '00:' : ( $M <10 ? ( '0' . $M . ':' ) : ($M . ':') ) );
// il manque les seg
/*
a vous :-)
sortie html >>
si
$row[0]='00:02:56';
$row[1]='00:00:23';
$row[2]='00:01:16';
$row[3]='00:00:04';
00:04:39 < - methode 1
00:04: < - methode 2

$row[0]='00:02:56';
$row[1]='05:00:23';
$row[2]='00:01:16';
$row[3]='00:00:04';
05:04:39
05:04:

$row[0]='00:02:56';
$row[1]='05:00:23';
$row[2]='00:01:16';
$row[3]='20:00:04';
01:04:39
25:04:
*/ [/php]

par pjl » 20 avr. 2005, 11:51

et pourquoi ce ne serait pas la requête qui ferait le calcul plutôt que de le faire en PHP ??

par kermoa » 20 avr. 2005, 11:29

merci pour vos reponses
j'ai finalement enregistré la durée sous 2 formes dans la BD : forme HH:MM:SS et un autre champ contenant le nombre de secondes l'un pour la lisibilité, l'autre pour travailler dessus(en faisant un explode et en multipliant le champ HH par 3600, le champ MM par 60...)

par fran_car » 20 avr. 2005, 10:46

Bonjour,

Il n'y a pas de fonction qui permette d'effectuer cette opération simplement.

Il faut donc séparer les heures, minutes et secondes (par exemple avec la fonction explode()), effectuer les opérations nécessaires pour obtenir un nombre total de secondes, puis formater le résultat.

Mais peut-être que la meilleure solution se situe en amont, au niveau de votre base de données. Etes-vous certain d'avoir besoin des données au format HH:MM:SS à ce niveau ? Ne vaudrait-il pas mieux y stocker simplement le nombre de secondes (nombre entier), et effectuer la conversion au format HH:MM:SS au dernier moment, dans le PHP ?

par DarkBlue » 20 avr. 2005, 10:33

Je pense que si tu les converties en secondes pour commencer ça sera mieu !

ensuite tu utilise la commande "SELECT SUM" de sql sur les colonnes et les lignes desirees.

addition durées

par kermoa » 20 avr. 2005, 10:19

bonjour,
j'ai fais une requete sur une base ou j'ai recuperé dans un tableau toutes les durées correspondantes a une personne (du type HH:MM:SS)
je souhaiterais additionner l'ensemble des valeurs du tableau.

Exemple :
$row[0]=00:02:56
$row[1]=00:00:23
$row[2]=00:01:16
$row[3]=00:00:04

il faudrai que je recupere 00:04:39

si vous savez comment faire...

Merci d'avance