Есть ли способ сделать запрос в MySQL, который даст мне разницу между двумя временными метками за секунды, или мне нужно будет сделать это на PHP? И если да, как бы я это сделал?
MySQL: как получить разницу между двумя метками времени в секундах
Ответ 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 дней)
Ответ 2
Как насчет "TIMESTAMPDIFF":
SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from 'post_statistics'
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff
Ответ 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 дней)