Есть ли способ сделать запрос в 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 дней)