Есть ли способ сделать запрос в MySQL, который даст мне разницу между двумя отметками времени в секундах, или мне нужно будет сделать это в PHP? И если да, то как я могу это сделать?
100
Можно использовать 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
столбце функция возвращает значение внутренней метки времени напрямую, без неявного преобразования «строка в метку времени Unix».Имейте в виду, что
TIMEDIFF()
возвращаемый тип данныхTIME
.TIME
значения могут варьироваться от -838: 59: 59 до 838: 59: 59 (примерно 34,96 дня).
unit
параметра значениеSECOND
.Как насчет "TIMESTAMPDIFF":
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff
источник
str_to_date(date_column, '%m/%d/%Y')
в функции TIMESTAMPDIFF для столбца, который нуждается в исправлении форматирования.TIME_TO_SEC
достигает максимума,3020399
тогда как это возвращает правильное значение.Если вам нужна беззнаковая разница, добавьте
ABS()
вокруг выражения.Кроме того, вы можете использовать,
TIMEDIFF(ts1, ts2)
а затем преобразовать результат времени в секунды с помощьюTIME_TO_SEC()
.источник
Обратите внимание, что
TIMEDIFF()
решение работает только тогда, когда разницаdatetimes
составляет менее 35 дней !TIMEDIFF()
возвращаетTIME
тип данных, а максимальное значение TIME составляет 838: 59: 59 часов (= 34,96 дней)источник