Existe-t-il un moyen de faire une requête dans MySQL qui me donne la différence entre deux horodatages en secondes, ou dois-je le faire en PHP ? Et si c'est le cas, comment dois-je m'y prendre ?
Réponses
Trop de publicités?Vous pourriez utiliser le TIMEDIFF()
et le TIME_TO_SEC()
fonctionne comme suit :
SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
Vous pouvez également utiliser le UNIX_TIMESTAMP()
fonction comme @Amber a suggéré dans une autre réponse :
SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') -
UNIX_TIMESTAMP('2010-08-20 12:00:00') diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
Si vous utilisez le TIMESTAMP
type de données, je suppose que le UNIX_TIMESTAMP()
serait légèrement plus rapide, puisque TIMESTAMP
sont déjà stockées sous la forme d'un nombre entier représentant le nombre de secondes depuis l'époque ( Source : ). Citant le docs :
Cuando
UNIX_TIMESTAMP()
est utilisé sur unTIMESTAMP
la fonction renvoie directement la valeur de l'horodatage interne, sans conversion implicite "string-to-Unix-timestamp".Gardez à l'esprit que
TIMEDIFF()
retourner le type de données deTIME
.TIME
Les valeurs peuvent aller de "-838:59:59" à "838:59:59" (environ 34,96 jours).
Que diriez-vous de "TIMESTAMPDIFF" :
SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff