php - timediff - MySQL: cómo obtener la diferencia entre dos marcas de tiempo en segundos
timestampdiff mysql (4)
¿Existe alguna manera de hacer una consulta en MySQL que me dé la diferencia entre dos marcas de tiempo en segundos o tendré que hacer eso en PHP? Y si es así, ¿cómo haré eso?
¿Qué tal "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
Tenga en cuenta que la solución TIMEDIFF()
solo funciona cuando las fechas están separadas por menos de 35 días . TIMEDIFF()
devuelve un tipo de datos TIME
, y el valor máximo para TIME es 838: 59: 59 horas (= 34,96 días)
Puede usar las TIMEDIFF()
y TIME_TO_SEC()
siguiente manera:
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)
También podría usar la función UNIX_TIMESTAMP()
como @Amber sugerida en otra respuesta:
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 está utilizando el tipo de datos TIMESTAMP
, supongo que la solución UNIX_TIMESTAMP()
sería un poco más rápida, ya que los valores TIMESTAMP
ya están almacenados como un número entero que representa el número de segundos desde la época ( Source ). Citando los UNIX_TIMESTAMP() :
Cuando
UNIX_TIMESTAMP()
se utiliza en una columnaTIMESTAMP
, la función devuelve el valor interno de marca de tiempo directamente, sin una conversión implícita de "cadena-a-marca de tiempo Unix".Tenga en cuenta que
TIMEDIFF()
devuelve el tipo de datos deTIME
.TIME
valoresTIME
pueden variar de ''-838: 59: 59'' a ''838: 59: 59'' (aproximadamente 34.96 días)
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)
Si desea una diferencia sin signo, agregue un ABS()
alrededor de la expresión.
Alternativamente, puede usar TIMEDIFF(ts1, ts2)
y luego convertir el resultado del tiempo en segundos con TIME_TO_SEC()
.