Obtenir le temps restant

Obtenir le temps restant - SQL/NoSQL - Programmation

Marsh Posté le 17-11-2006 à 18:02:04    

Bonjour !
 
Je cherche une solution pour trouver le temps restant (ou le temps dépassé) entre une date (DATETIME) qui est enregistrée dans ma base et la date courante. J'ai cherché un peu mais je tatonne, je ne sais pas quelle solution peut convenir le mieux ...  :heink:  
 
Merci de votre aide :)

Reply

Marsh Posté le 17-11-2006 à 18:02:04   

Reply

Marsh Posté le 17-11-2006 à 19:43:05    

je suppose que c'est en mysql (vu que rien n'est précisé)
fais un truc de ce style :

Code :
  1. select now()-champ_de_ta_table from ta_table;


tu obtients la différence en secondes

Reply

Marsh Posté le 19-11-2006 à 07:25:47    

couak a écrit :

je suppose que c'est en mysql (vu que rien n'est précisé)
fais un truc de ce style :

Code :
  1. select now()-champ_de_ta_table from ta_table;


tu obtients la différence en secondes


 :D  

Reply

Marsh Posté le 19-11-2006 à 09:48:25    

En oracle c'est la même chose.
En SQL SERVER on utilie DATEDIFF(...)

Reply

Marsh Posté le 19-11-2006 à 16:57:13    

non en oracle on utilise sysdate et pas now() :p

Reply

Marsh Posté le 20-11-2006 à 11:25:09    

couak a écrit :

je suppose que c'est en mysql (vu que rien n'est précisé)
fais un truc de ce style :

Code :
  1. select now()-champ_de_ta_table from ta_table;


tu obtients la différence en secondes


 
J'ai fais champ_de_ta_table-now(), ça me donne un nombre positif si la tâche est pas encore terminée et négatif si elle est dépassée. Ca c'est logique. Par contre quand je convertis les secondes obtenues en heures/min/sec, ça colle pas, le chiffre est trop grand...
 
c'est datediff qu'il faut utiliser alors? Arff  :pt1cable:
 
PS: au fait, oui c'est mysql !


Message édité par smoggin le 20-11-2006 à 11:25:50
Reply

Marsh Posté le 20-11-2006 à 14:00:47    

http://dev.mysql.com/doc/refman/4. [...] tions.html
datediff te donnera la différence en jours
qu'as tu utilisé pour faire la conversion ? pour la conversion tu as la fonction SEC_TO_TIME()
et comme toujours : lire le manuel :)

Reply

Marsh Posté le 20-11-2006 à 14:54:25    

Pour faire la conversion j'ai utilisé une fonction php que j'ai récupéré sur le net :
 

Code :
  1. function calcul_hours($temps)
  2. {
  3.   //combien d'heures ?
  4.   $hours = floor($temps / 3600);
  5.   //combien de minutes ?
  6.   $min = floor(($temps - ($hours * 3600)) / 60);
  7.   if ($min < 10)
  8.     $min = "0".$min;
  9.   //combien de secondes
  10.   $sec = $temps - ($hours * 3600) - ($min * 60);
  11.   if ($sec < 10)
  12.     $sec = "0".$sec;
  13.        
  14.   echo $hours."h".$min."m".$sec."s";
  15. }


 
Là j'ai changé, j'utilise TIMEDIFF(), le prob c'est que quand il y'a plus de 24h ça n'affiche pas X jours donc je sais pas trop comment enchainer...

Reply

Marsh Posté le 20-11-2006 à 15:18:13    

pourquoi se faire chier en php ? tu fais une requête du style :

Code :
  1. select SEC_TO_TIME(now()-champ_de_ta_table) from ta_table

et tu obtiens en HH:MM:SS le temps entre maintenant et ta date

Reply

Marsh Posté le 20-11-2006 à 15:29:29    

Oui mais le résultat que j'obtiens est pas cohérent :'(
 
Genre avec la tache qui se termine à 16h18, là il est 15h27 et le resultat de la requête c'est 02:31:03

Reply

Marsh Posté le 20-11-2006 à 15:29:29   

Reply

Marsh Posté le 20-11-2006 à 17:38:20    

bon effectivement la soustraction a l'air de poser des pb sous mysql
il faut utiliser timediff et tu obtients en HH:MM:SS la différence entre les deux dates

Code :
  1. select timediff(now(), champ_de_ta_table) from ta_table;

Reply

Marsh Posté le 21-11-2006 à 09:18:34    

Oui, mais quand y'a plus de 24h? c'est ça mon problème maintenant :/

Reply

Marsh Posté le 01-12-2006 à 16:08:49    

en fait il semblerait que (champ-now()) renvoi une valeur en 20e de seconde
pour obtenir le resultat en seconde il faut diviser par 50 environ
ensuite pour le resultat tu le divise toi même pour connaitre le nbre de jours, heures, etc

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed