Kommunauty
Connexion
Inscription

Différence de plusieurs dates


maxredphenix Messages : 60

Non tps_acces_signature est enregistrer en format heure (H:i:s) dans ma bdd donc logiquement il faudrait que je fasse aussi une conversion en secondes non?

Ok pour la conversion, je vais regarder.

Bonne journée et merci

mardi 11 septembre 2012

SiMax Messages : 7572

Je comprends pas. tps_acces_signature ça correspond à quel moment précis alors si c'est pas une durée ? C'est au début ou à la fin de l'intervention ?

mardi 11 septembre 2012

maxredphenix Messages : 60

En fait, c'est pendant l'intervention.

Dès lors qu'on créer une intervention, on rentre la date de début puis de fin et en même temps, on indique le temps perdu (tps_acces_signature) ainsi une description rapide de l'intervention effectuée.

Par exemple:

début: 11-09-2012 08:00:00

fin: 11-09-2012 11:00:00

tps_acces_signature: 01:00:00

description: Test de la prise RJ45.

Ce qui au final me donnera 2 heures réellement travaillée sur l'intervention. En effet, on a 3h entre le début et la fin de l'intervention, mais on a 1h de perdu (pour accéder au local par exemple).

J'aurais du donner cette exemple au début, ça aurait été mieux pour toi, mais comme j'ai l'habitude de travaillé ainsi j'ai pas fait gaffe

mardi 11 septembre 2012

SiMax Messages : 7572

Ah ok ! C'est plus clair avec l'exemple, oui

Alors il faut convertir la date en secondes aussi avec la fonction DATE_FORMAT :

DATE_FORMAT(tps_acces_signature,%s)
mardi 11 septembre 2012

maxredphenix Messages : 60

Je viens de faire quelques modifications avec ce que tu m'as donné.

<table border="0" cellspacing="0" style="text-align:center;vertical-align: middle;" align="center" charset="utf-8">
<?php
$id_appel=$datas['id_appel'];
$reqduree=mysql_query("SELECT SUM(TIMESTAMPDIFF(SECOND,debut_inter,fin_inter)) AS duree, SUM(DATE_FORMAT(tps_acces_signature,%s)) AS tps_acces FROM work_times WHERE intervention_id=$id_appel");
while ($data = mysql_fetch_assoc($reqduree)) {$duree = $data['duree'] - $data['tps_acces'];}
?>
<tr><td colspan="2" style="color:red">Calcul du temps passé sur l'intervention</td></tr>
<tr><td>Durée Inter: </td>
<!-- On convertie $duree en heure et on l'affiche-->
<td><input style="width:100px" type="time" name="duree_inter" class="duree_inter" value="<?php echo date('H',$duree).''.'H'; ?>"/></td>
</tr>
</table>

Mais ça me donne.....28800 heures

Après quelques lectures sur le site de php, j'ai vu que leurs code avaient des guillemets, j'ai donc fait ceci:

<table border="0" cellspacing="0" style="text-align:center;vertical-align: middle;" align="center" charset="utf-8">
<?php
$id_appel=$datas['id_appel'];
$reqduree=mysql_query("SELECT SUM(TIMESTAMPDIFF(SECOND,'debut_inter','fin_inter')) AS duree, SUM(DATE_FORMAT('tps_acces_signature','%s')) AS tps_acces FROM work_times WHERE intervention_id=$id_appel");
while ($data = mysql_fetch_assoc($reqduree)) {$duree = $data['duree'] - $data['tps_acces'];}
?>
<tr><td colspan="2" style="color:red">Calcul du temps passé sur l'intervention</td></tr>
<tr><td>Durée Inter: </td>
<!-- On convertie $duree en heure et on l'affiche-->
<td><input style="width:100px" type="time" name="duree_inter" class="duree_inter" value="<?php echo date('H',$duree).''.'H'; ?>"/></td>
</tr>
</table>

Mais la, j'ai......0 heures.

Voila le screenshot du rendu du 2eme code:

Donc logiquement je devrais avoir: 8h - 1h soit (dur dur ) 7h.

Est-ce que j'ai oublié quelque chose? la je vois pas, tout est en secondes puis convertie au final en heure....

Merci pour ton aide

mardi 11 septembre 2012

SiMax Messages : 7572

Pour voir où ça cloche, fais un echo dans le while de la requête pour savoir ce que valent $data['duree'] et $data['tps_acces'] et dis-moi ce qu'ils valent

mardi 11 septembre 2012

maxredphenix Messages : 60

Je viens de faire:

echo $data['duree'].' et '.$data['tps_acces'];

avec les guillemets j'ai: et

sans les guillemets j'ai: 28800 et 0

mardi 11 septembre 2012

SiMax Messages : 7572

Oups, je viens de me rendre compte que j'ai fait une erreur. C'est pas DATE_FORMAT mais UNIX_TIMESTAMP pour avoir le nombre de secondes.

Et pour avoir les heures il faut juste diviser par 3600. Et arrondir pour éviter d'avoir des virgules, sait on jamais.

Le code final :

<table border="0" cellspacing="0" style="text-align:center;vertical-align: middle;" align="center" charset="utf-8">
    <?php
        $id_appel=$datas['id_appel'];
        $reqduree=mysql_query("SELECT SUM(TIMESTAMPDIFF(SECOND,'debut_inter','fin_inter')) AS duree, SUM(UNIX_TIMESTAMP('tps_acces_signature')) AS tps_acces FROM work_times WHERE intervention_id=$id_appel");
        while ($data = mysql_fetch_assoc($reqduree)) {$duree = $data['duree'] - $data['tps_acces'];}
    ?>
    <tr><td colspan="2" style="color:red">Calcul du temps passé sur l'intervention</td></tr>
    <tr><td>Durée Inter: </td>
        <!-- On convertie $duree en heure et on l'affiche-->
        <td><input style="width:100px" type="time" name="duree_inter" class="duree_inter" value="<?php echo round($duree/3600); ?>"/></td>
    </tr>
</table>
mardi 11 septembre 2012

maxredphenix Messages : 60

Merci encore une fois pour ta réponse,

Je viens de tester mais j'ai toujours 0, j'ai donc enlever les guillemets et j'ai donc 8h comme résultat. En fait, je viens de refaire un echo des deux valeurs de la requete sql: echo $data['duree'].' et '.$data['tps_acces']; et j'ai 28800 et 0.

J'ai donc regardé sur le net et j'ai trouvé ceci TIME_TO_SEC.

Au final, c'est bon j'ai bien mes 7heures. Cela donne au final:

<table border="0" cellspacing="0" style="text-align:center;vertical-align: middle;" align="center" charset="utf-8">
<?php
$id_appel=$datas['id_appel'];
$reqduree=mysql_query("SELECT SUM(TIMESTAMPDIFF(SECOND,debut_inter,fin_inter)) AS duree, SUM(TIME_TO_SEC(tps_acces_signature)) AS tps_acces FROM work_times WHERE intervention_id=$id_appel");
while ($data = mysql_fetch_assoc($reqduree)) {$duree = $data['duree'] - $data['tps_acces'];
?>
<tr><td colspan="2" style="color:red">Calcul du temps passé sur l'intervention</td></tr>
<tr><td>Durée Inter: </td>
<!-- On convertie $duree en heure et on l'affiche-->
<td><input style="width:100px" type="time" name="duree_inter" class="duree_inter" value="<?php echo round($duree/3600).' Heures'; ?>"/></td>
</tr>
</table>

Je pense que c'est tout bon, j'ai testé en rajoutant d'autres valeur et à chaque fois j'avais bien le bon résultat.

Je te remercie pour toute l'aide que tu m'as apportée

Passe une bonne soirée et à bientôt peut être.

Merci

mardi 11 septembre 2012

SiMax Messages : 7572

De rien, c'est parfait si ça marche !

Pour tes prochains scripts, je te conseille de travailler directement avec des secondes pour tout, ça sera beaucoup plus simple, surtout quand il y a des opérations comme ça à faire

N'hésite pas à passer de temps en temps dans le forum programmation pour aider les autres ou si tu as d'autres questions

mardi 11 septembre 2012

Page suivante »