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

Lama
Invité n'ayant pas de compte PHPfrance

05 juil. 2006, 13:22

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

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

05 juil. 2006, 13:39


Lama
Invité n'ayant pas de compte PHPfrance

05 juil. 2006, 13:43

Oui mais moi je cherche pas à calculer l'écart entre deux dates, mais entre deux heures!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 juil. 2006, 13:50

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 :(

Petit nouveau ! | 5 Messages

27 mars 2008, 16:33

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 mars 2008, 16:38

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

27 mars 2008, 16:57

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:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 mars 2008, 17:04

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 ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

27 mars 2008, 17:22

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

Petit nouveau ! | 5 Messages

27 mars 2008, 17:28

ah si une derniere question, est t'il possible de faire un total de toute c'est durée????

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 mars 2008, 17:45

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;
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

27 mars 2008, 17:53

mais comment enregistrer le delta dans un champ de ma table qui s'appelle durer car sa ne m'enregistre rien?

merci d'avance!!!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 mars 2008, 18:42

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 ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...