Page 1 sur 2

dae heure seconde ... entre deux date ...

Posté : 01 mars 2006, 12:58
par Invité
Bonjour,

vola, je stoche deux date dans ma base : en datetime

une c'est le jour de l'interevntion , l'autre c'est 7 jours plus tard. jsuque la aucun probleme.

MAis mnt, je voudrai sur une autre page recupere la date du jour meme, pour la compare avec celle de 7 jour plus tard pour pouvoir afficher soit reste : 3j 18h 24m 11s
ou en retard de 4j 11h12m01s

qui peut m'aider?
Merci d'avance

Posté : 01 mars 2006, 13:04
par Hermès
Trouvé dans la doc MySQL :
mysql> SELECT TIMEDIFF('2000:01:01 00:00:00', '2000:01:01 00:00:00.000001');
-> '-00:00:00.000001'
mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001','1997-12-30 01:01:01.000002');
-> '46:58:57.999999'
Donc convertis tes dates pour les avoir sous la forme aaaa-mm-jj hh:mm:ss et utilise mysql pour te les comparer.

Posté : 01 mars 2006, 13:06
par Invité
et comment j'obtient la date du jours????

Posté : 01 mars 2006, 13:12
par Hermès
NOW()

donc

SELECT TIMEDIFF(NOW(), '2000:01:01 00:00:00.000001');

Posté : 01 mars 2006, 13:13
par heddicmi
et comment j'obtient la date du jours????
Dans le second exemple, il y a une différence de 46... Tu n'est pas sans savoir qu'i y a 24 heure par jour... Donc : 1j et 22h ;)

éhéh... J'ai mal lu la question :p désolé :p

Posté : 01 mars 2006, 13:19
par Hermès
et comment j'obtient la date du jours????
Dans le second exemple, il y a une différence de 46... Tu n'est pas sans savoir qu'i y a 24 heure par jour... Donc : 1j et 22h ;)

éhéh... J'ai mal lu la question :p désolé :p
En parlant de ça, je viens de regarder s'il n'y avait pas possibilité à MySQL de faire tout seul la conversion d'une valeur du type "46:00:00" en une valeur du type "1d 22:00:00". Mais j'ai rien trouvé, faut faire ça soit même (cela dit c'est pas ce qu'il y a de plus compliqué).

Posté : 01 mars 2006, 13:21
par Invité
$ref=" SELECT TIMEDIFF(NOW(), '2000:01:01 00:00:00.000001')";
$kef = mysql_query($ref);

et puis je recupere comment ???

Posté : 01 mars 2006, 13:28
par heddicmi
En parlant de ça, je viens de regarder s'il n'y avait pas possibilité à MySQL de faire tout seul la conversion d'une valeur du type "46:00:00" en une valeur du type "1d 22:00:00". Mais j'ai rien trouvé, faut faire ça soit même (cela dit c'est pas ce qu'il y a de plus compliqué).
En effet, j'ai parcourus la page des fonctions et rien ne semblait convenir... C'est cependant dommage, parcequ'il y a quasiement toute les possibilité (nombre de jours, nombres de mois etc..)

Celà dit, ne pas oublier que timediff() est là depuis mysql 4.1.1... Faut faire attention à, on sait jamais...

Pour toi invité, il faut que tu customise ta requête...
Pour toi, elle sera du type :
SELECT TIMEDIFF(now(), TOM_CHAMP_DATE+7JOURS)
FROM TA_TABLE
WHERE ID_INTERVENTION=X

Posté : 01 mars 2006, 13:33
par Hermès
$diff = mysql_result($kef);
preg_match("/(-?)([0-9][0-9]):([0-5][0-9]):([0-5][0-9])/", $diff, $res);

$difference = (floor($res[2]/24))."j ".($res[2]%24)."h ".$res[3]."m ".$res[4]."s";

if ($res[1] == "-")
  echo "Il y a un retard de ".$difference;
else
  echo "Il reste ".$difference;
Je n'ai pas testé cette portion de code.
Explications : on vérifie que la chaine est du type "-hh:mm:ss" ou "hh:mm:ss" et on capture les heures, les minutes et les secondes.
On divise le nombre d'heures par 24 (et on arrondi) pour connaitre le nombre de jours que ça fait.
On fait le nombre d'heures modulo 24 pour savoir combien d'heures ça fait.

Edit : Super les smileys dans le code =) je désactive.

Posté : 01 mars 2006, 13:35
par Invité
ok merci, mais comment je recupere cette valeur dans une variable???

Posté : 01 mars 2006, 13:41
par Invité
j'obtiens ceci avec le dernier code :

Warning: Wrong parameter count for mysql_result() in c:\documents and settings\stagiere\bureau\dit simplification programme\ajoutclientcompletdb.php on line 235

Posté : 01 mars 2006, 13:45
par Invité
ok, il manquai un ,0

mnt le soucis c'est qu'il me mets tjrs reste 2j20h au y reste 7j ...

Posté : 01 mars 2006, 13:47
par Hermès
oui je suis pas un habitué du mysql_result :
$row = mysql_fetch_row($kef);
$diff = $row[0];
Et normalement $diff vaudra le résultat de la requete SQL.

Posté : 01 mars 2006, 13:48
par Hermès
Affiche-nous ta requête et le résultat qu'on voye le problème.

Posté : 01 mars 2006, 14:01
par Invité
SELECT TIMEDIFF(now(),delai) FROM intervention WHERE idinter='205'