Kommunauty
Connexion
Inscription

Différence de plusieurs dates


maxredphenix Messages : 60

Bonjour à tous,

J'ai un formulaire qui me sert à enregistrer des interventions, chaque intervention a ça date de début et ça date de fin, les 2 étant en format datetime yyyy-mm-dd H:i:s. De plus j'ai un champ me permettant de notifier le temps perdu à faire signer les papiers etc...., celui-ci étant en format h:i:s

Le but est d'enregistrer plusieurs interventions pour une seule et même demande et de calculer le temps total passé à faire cette inter.

Pour le moment j'ai ceci:

$reqduree=mysql_query("SELECT SUM(DATEDIFF(fin_inter,debut_inter)) AS duree, SUM(tps_acces_signature) AS tps_acces FROM work_times WHERE intervention_id=$id_appel");
while ($data = mysql_fetch_assoc($reqduree)) {$duree = date("H", ($data['duree'] - $data['tps_acces']));}

Mais si je créer ce topic c'est que le résultat n'est pas bon tout

En faite je voudrais faire la différence entre le début et la fin de chaque inter MOINS le temps passé à signer (ou accéder etc...) vu que le but étant de connaitre juste le temps total, le champ tps_acces_signature me sert juste pour l'enregistrement dans un calendrier. La variable $duree étant la valeur du temps total en heure et afficher ensuite par un echo.

J'ai tenté pas mal de chose mais jamais rien de concluant . Idem j'aimerai bien faire un résultat en heure si inférieur à 24h et Jour + heure si on dépasse mais je vois pas comment faire.

Si quelqu'un sait comment faire je suis preneur, que ce soit directement via une requête sql, en php ou en javascript.

Merci d'avance

maxredphenix

samedi 8 septembre 2012

SiMax Messages : 7572

Salut !

Comme c'est un problème logique il faudrait un peu plus d'infos. Tu fais ça dans quel contexte ? Tu peux donner un exemple complet d'enregistrement, avec ce à quoi ça correspond dans la réalité ? Parce que je vois pas à quoi correspondent une intervention, une demande...

Pour le moment j'ai juste compris que tps_acces_signature correspond au temps de l'intervention passé à faire autre chose que l'intervention elle-même et que chaque intervention est identifiée par un id_appel.

Et du coup une demande comporte plusieurs interventions ?

dimanche 9 septembre 2012

maxredphenix Messages : 60

Bonjour,

Je te remercie pour ta réponse. En effet une demande peut comporter plusieurs interventions et pour tps_acces_signature c'est tout a fait ça.

Pour tout expliquer, c'est un programme de gestion de travail, j'ai crée ce dernier parce que j'en ai marre de tout écrire sur papier, je trouve que c'est gâcher beaucoup de feuilles pour rien. Dès que je reçois une demande par un client, que ce soit une panne ou un travail à faire, j'enregistre cela dans ma bdd, ensuite dès que j'ai besoin d'intervenir je rentre une intervention dans une table nommée work_times. Voila à quoi ressemble le code sql de la table work_times:

----------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `licea`.`work_times` (

`id` INT NOT NULL AUTO_INCREMENT ,

`intervenant` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,

`tps_acces_signature` TIME NULL DEFAULT NULL ,

`debut_inter` DATETIME NULL DEFAULT NULL ,

`fin_inter` DATETIME NULL DEFAULT NULL ,

`intervention_id` TINYINT NOT NULL ,

`description` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,

PRIMARY KEY (`id`) )

ENGINE = InnoDB;

-----------------------------------------------------------------------

Le but est de calculer réellement le temps passé sur la demande en fonction de ce qui est rentré dans les interventions. J'ai regardé toutes les commandes sql qui correspondent aux dates mais je trouve pas comment faire cela.

J'avoue que si tu trouve comment faire ça m'aiderai beaucoup.

Merci d'avance

dimanche 9 septembre 2012

SiMax Messages : 7572

Premier problème alors, l'utilisation de DATEDIFF. C'est une fonction qui donne le nombre de jours entre deux dates. Dans ton cas, c'est pas assez précis. Pour les dates, je te conseille d'utiliser le timestamp. Comme ça, tu pourras gérer tous tes temps en secondes. Puis tu mets aussi tps_acces_signature en secondes.

Comme ça tu pourras faire des opérations sans problème et te retrouver avec une durée en secondes. Avec une petite fonction PHP tu pourras facilement avoir la date en jours, heures, secondes.

Ca, c'est l'idée générale. Je te laisse faire plus de recherches sur le timestamp, essayer d'adapter tes scripts. Et je suis là dès que t'es bloqué ou que t'as une question

dimanche 9 septembre 2012

maxredphenix Messages : 60

Merci, je vais regarder tout cela. Merci pour ton aide, je te tiens au courant.

dimanche 9 septembre 2012

SiMax Messages : 7572

De rien ! Bon courage

dimanche 9 septembre 2012

maxredphenix Messages : 60

Bonsoir,

J'ai regardé du coté des timestamp, j'ai fait ceci:

$reqduree=mysql_query("SELECT SUM(TIMESTAMPDIFF(HOUR,fin_inter,debut_inter)) AS duree, SUM(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'];}

Si je fais une comparaison avec un calcul "A la main" c'est ok, mais je que je comprends pas c'est que j'ai un résultat négatif et je vois pas pourquoi. De plus dès que je rajoute un tps_acces_signature c'est la cata..... bizarre

Je cherche toujours, mais je voulais juste savoir si je suis bien partie du côté de la requête sql?

Merci

lundi 10 septembre 2012

SiMax Messages : 7572

Avec TIMESTAMPDIFF, le premier paramètre est l'unité. Comme on veut fonctionner en secondes, il faut préciser SECOND et pas HOUR. Et comme TIMESTAMPDIFF soustrait le troisième paramètre au deuxième, il faut inverser début et fin. Ce qui nous donne :

$reqduree=mysql_query("SELECT SUM(TIMESTAMPDIFF(SECOND,debut_inter,fin_inter)) AS duree, SUM(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'];}

$duree devrait alors bien donner la durée en secondes de l'intervention

lundi 10 septembre 2012

maxredphenix Messages : 60

Merci pour ta réponse,

J'étais tellement dans la manière de convertir les dates que j'ai pas fait gaffe à l'ordre....

Par contre, vu que c'est en second maintenant au niveau des début et fin d'intervention, il faut que je fasse pareil pour le tps_acces_signature non?

Du coup, j'ai juste à refaire une conversion de $duree en heure pour obtenir ce que je désire.

Merci et bonne soirée

lundi 10 septembre 2012

SiMax Messages : 7572

Bah tps_acces_signature n'est pas dans une fonction TIMESTAMPDIFF. C'est simplement une durée en secondes qu'on retranche à la durée en secondes qu'on a trouvé avant. Donc pas besoin d'y toucher.

Oui, après c'est de la simple conversion de durées

lundi 10 septembre 2012

Page suivante »