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