Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Вы можете использовать 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 уже сохранены как целое число, представляющее количество секунд с момента (Источник). Цитирование docs:

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

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

Ответ 3

UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)

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

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

Ответ 4

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