MySQL: как получить разницу между двумя метками времени в секундах

Есть ли способ сделать запрос в MySQL, который даст мне разницу между двумя временными метками за считанные секунды или мне нужно будет сделать это на PHP? И если да, как бы я это сделал?

Вы можете использовать функции TIMEDIFF() и TIME_TO_SEC() следующим образом:

 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) 

Вы также можете использовать UNIX_TIMESTAMP() как @Amber, предложенную в другом ответе:

 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) 

Если вы используете тип данных TIMESTAMP , я думаю, что решение UNIX_TIMESTAMP() будет немного быстрее, так как значения TIMESTAMP уже сохраняются как целое число, представляющее количество секунд с момента ( Источник ). Цитирование документов :

Когда UNIX_TIMESTAMP() используется в столбце TIMESTAMP , функция возвращает внутреннее значение временной отметки, без какого-либо неявного преобразования «string-to-Unix-timestamp».

Имейте в виду, что TIMEDIFF() возвращает тип данных TIME . Значения TIME могут находиться в диапазоне от -838: 59: 59 'до' 838: 59: 59 '(примерно 34,96 дней)

Как насчет «TIMESTAMPDIFF»:

 SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics` 

http://www.w3resource.com/mysql/date-and-time-functions/mysql-timestampdiff-function.php

 UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2) 

Если вы хотите разницу без знака, добавьте ABS() вокруг выражения.

В качестве альтернативы вы можете использовать TIMEDIFF(ts1, ts2) а затем преобразовать результат времени в секундах с помощью TIME_TO_SEC() .

Обратите внимание, что решение TIMEDIFF() работает только тогда, когда время жизни меньше 35 дней ! TIMEDIFF() возвращает тип данных TIME , а максимальное значение для TIME составляет 838: 59: 59 часов (= 34,96 дней)