Page 1 sur 1

Calcul d'une durée (faire la différence entre deux heures)

Posté : 05 juil. 2006, 13:22
par Lama
Bonjour,

Je dois calculer la différence entre deux heures au format TIME et je n'arrive pas à obtenir les minutes:

Code : Tout sélectionner

$duree = $heureFin - $heureDebut
Avec le code si dessus j'obtiens par exemple 17:00:00-13:30:00= 3 et moi j'aimerais obtenir 03:30:00 ou alors 3,5

Merci de votre aide

Posté : 05 juil. 2006, 13:39
par albat

Posté : 05 juil. 2006, 13:43
par Lama
Oui mais moi je cherche pas à calculer l'écart entre deux dates, mais entre deux heures!

Posté : 05 juil. 2006, 13:50
par ouckileou
Oui mais moi je cherche pas à calculer l'écart entre deux dates, mais entre deux heures!
Si t'avais cherché un peu dans le manuel t'aurais vu que en plus de DATEDIFF (pour les dates) il y a TIMEDIFF (pour les times)

génial non ?

Allez je vais le rajouter puisque c'est manifestement trop dur de pousser plus loin la recherche à partir de la FAQ :(

Posté : 27 mars 2008, 16:33
par topher72
bonjour j'ai lu le tuto et j'ai utilisé le TIMEDIFF:

Code : Tout sélectionner

$durer="SELECT TIMEDIFF(heured, heuref) FROM <taches>";
et le probleme c que je ne c pas trop comment faire pour que dans un tableau il m'affiche cette durée

Posté : 27 mars 2008, 16:38
par Ryle
Ce que tu as appellé $durer est une requête sql.
Il te faut donc l'exécuter (avec mysql_query() par exemple)
puis parcourir les résultats obtenus a l'aide d'une boucle (avec mysql_fetch_row() ou mysql_fetch_assoc() en donnant un alias à ton champ)
et enfin afficher les valeurs obtenues :)

Posté : 27 mars 2008, 16:57
par topher72
j'ai deja une requetesql enfaite ma durée est afficher dans un tableau avec pleins d'autre chose que je prend de la base de donnée.

Code : Tout sélectionner

mysql_connect('localhost','root','')or die('Error connect'); mysql_select_db('planning'); $requeteSQL="SELECT * FROM taches "; $resultat=mysql_query($requeteSQL); if($resultat){ echo '<table id="table">'."\r\n"; echo "\t".'<thead><tr>'."\r\n"; echo "\t"."\t".'<th>date</th>'."\r\n"; echo "\t"."\t".'<th>heure de début</th>'."\r\n"; echo "\t"."\t".'<th>intervention à faire</th>'."\r\n"; echo "\t"."\t".'<th>demandeur</th>'."\r\n"; echo "\t"."\t".'<th>intervention effectuer</th>'."\r\n"; echo "\t"."\t".'<th>heures de fin</th>'."\r\n"; echo "\t"."\t".'<th>durée</th>'."\r\n"; echo "\t"."\t".'<th colspan="2">Actions</th>'."\r\n"; echo "\t".'</tr></thead>'."\r\n"; while($data=mysql_fetch_array($resultat)){ echo "\t".'<tr>'."\r\n"; echo "\t"."\t".'<td>'.$data['date'].'</td>'."\r\n"; echo "\t"."\t".'<td>'.$data['heured'].'</td>'."\r\n"; echo "\t"."\t".'<td style="width=200PX;">'.$data['intervaf'].'</td>'."\r\n"; echo "\t"."\t".'<td>'.$data['demandeur'].'</td>'."\r\n"; echo "\t"."\t".'<td style="width=200PX;">'.$data['intervef'].'</td>'."\r\n"; echo "\t"."\t".'<td>'.$data['heuref'].'</td>'."\r\n"; echo "\t"."\t".'<td>'.$data['durer'].'</td>'."\r\n"; echo "\t"."\t".'<td style="border:0;">> <a href="ajout.php?id='.$data['id'].'">Modifier</a></td>'."\r\n"; echo "\t"."\t".'<td style="border:1px solid #000;border-top:0;border-bottom:0;">> <a href="javascript:confirmDelete('.$data['id'].');">Supprimer</a></td>'."\r\n"; echo "\t".'</tr>'."\r\n"; } echo '</table>'."\r\n"; }else{ echo 'Erreur'; }
je débute et pour c'est pour un stage et je c pa trop comment faire pour le TIMEDIFF

dsl de poser des question comme sa mes se serait genti de me donnée quelques bon conseils. :roll:

Posté : 27 mars 2008, 17:04
par Ryle
Si tu veux calculer la différence en SQL, il te faut remplacer le SELECT * de ta requête par un SELECT suivi de la liste des champs dont tu as besoin (c'est de toute manière une bonne habitude à avoir pour la maintenance, même s'il y a 50 champs à lister et que c'est lourd à écrire, on ne le fait qu'une fois :))
ta requête va donc ressembler à :

Code : Tout sélectionner

SELECT date, heured, intervaf, demandeur .... FROM taches
il te suffit alors d’ajouter en plus ton calcul dans celle-ci :

Code : Tout sélectionner

SELECT date, heured, intervaf, demandeur ...., TIMEDIFF(heured, heuref) AS delta FROM taches
(ou "delta" est un alias pour la colonne calculée)

Il ne te reste plus alors qu’à récupérer et afficher la valeur de $data['delta'].

Ceci étant, tu peux tout aussi bien récupérer tes deux valeurs et calculer ensuite la différence en php ;)

Posté : 27 mars 2008, 17:22
par topher72
merci sa MARCHE c super je vous remercie vous me soulager vraiment sa fait sans vous mentir o moin jours que je suis dessus!!! :lol: :lol: :lol: :lol: :lol: MERCI

Posté : 27 mars 2008, 17:28
par topher72
ah si une derniere question, est t'il possible de faire un total de toute c'est durée????

Posté : 27 mars 2008, 17:45
par Ryle
En SQL, il te faudrait une seconde requête qui ferait une somme :

Code : Tout sélectionner

SELECT SUM(TIMEDIFF(heured, heuref)) AS totalDelta FROM ...
Mais le plus simple est sans doute d'additionner chacune de tes $data['delta'] dans une autre variable php, ce qui à la fin de ta boucle te donnera le total également :
$total = 0;
while (...) {
  ...
  $total = $total + $data['delta']; // ou $total+= $data['delta'];
}
echo $total;

Posté : 27 mars 2008, 17:53
par topher72
mais comment enregistrer le delta dans un champ de ma table qui s'appelle durer car sa ne m'enregistre rien?

merci d'avance!!!

Posté : 27 mars 2008, 18:42
par Ryle
Beuuh... l'intérêt d'enregistrer un calcul est très très limité, surtout quand il est aussi simple... ça t'oblige à le refaire à chaque fois qu'un des paramètres est modifié..

Maintenant, tu peux très bien faire un update de ta table à chaque fois pour stocker le calcul dans un champ spécifique :

Code : Tout sélectionner

UPDATE ta_table SET ton_champ = TIMEDIFF(...) WHERE ...