2014-05-09 10 views
0

J'ai besoin de la différence entre deux dates en jours, heures et minutes. Une date actuelle (NOW()) et un end_date. Et j'en ai besoin dans deux requêtes distinctes qui fonctionnent un peu différemment.Différence de date/heure MySQL en jours, heures et minutes

Le premier a besoin de les retourner dans le format suivant une seule colonne:

------------------------- 
|  time_left  | 
------------------------- 
| x days x hours x min | 
------------------------- 

Le second a besoin de les retourner dans trois colonnes, en vous assurant qu'il retourne 0s fo chaque colonne si le date_fin a surpassé la date actuelle:

------------------------------------------- 
| days_left | hrs_left | min_left | 
------------------------------------------- 
|  x  |  x  |  x  | 
------------------------------------------- 

J'ai une solution pour tout cela mais c'est horrible. Je suis sûr que quelqu'un a trouvé au moins une façon relativement propre de résoudre cela. Merci à l'avance!

+0

Pour le second, regardez dans 'TIMEDIFF',' TIME_TO_SEC' et 'MAX (0, yourValue)' fonctions –

Répondre

1

Celui d'avant était inexact, affichant une différence d'un jour et 3 heures sur ce qui aurait dû être une heure.

Celui-ci doit être précis avec des temps

SELECT 
    @diff:=ABS(UNIX_TIMESTAMP("2014-05-09 21:24:25") - UNIX_TIMESTAMP()) , 
    CAST(@days := IF(@diff/86400 >= 1, floor(@diff/86400),0) AS SIGNED) as days, 
    CAST(@hours := IF(@diff/3600 >= 1, floor((@diff:[email protected]@days*86400)/3600),0) AS SIGNED) as hours, 
    CAST(@minutes := IF(@diff/60 >= 1, floor((@diff:[email protected]@hours*3600)/60),0) AS SIGNED) as minutes, 
    CAST(@[email protected]*60 AS SIGNED) as seconds; 

Explained:

  • D'abord on calcule la différence absolue en quelques secondes et le mettre dans une variable
  • nous vérifions si nous obtenons un ou plusieurs de chaque (jour heure minute), et si oui, nous calculons comment nous obtenons et mettre dans une variable
  • pour les unités après le plus grand, nous faisons la même chose, mais d'abord nous soustrayons les secondes allouées à l'unité précédente de notre différence globale
  • Enfin nous mettons tout ce qui reste comme la plus petite unité, secondes
+0

Bien que cela ne fonctionne que pour moins d'un an, c'est toujours beaucoup mieux que ce que j'avais. Merci – Alternatex

+1

@alternatex mis à jour avec une requête qui fonctionne réellement – Noino

Questions connexes