Есть ли способ сделать запрос в 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
уже сохранены как целое число, представляющее количество секунд с начала эпохи (Источник). Цитата из docs:
Когда
UNIX_TIMESTAMP()
используется в столбцеTIMESTAMP
, функция возвращает значение внутренней метки времени напрямую, без неявной «строки». -в Unix-временную метку».Имейте в виду, что
TIMEDIFF()
возвращает тип данныхTIME
.ВРЕМЯ
значения могут варьироваться от '-838:59:59' до '838:59:59' (примерно 34,96 дня)
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)
Если вам нужна беззнаковая разница, добавьте ABS ()
вокруг выражения.
В качестве альтернативы можно использовать TIMEDIFF (ts1, ts2)
, а затем преобразовать результат времени в секунды с помощью TIME_TO_SEC ()
.