有没有办法可以在MySQL中进行查询,以便在几秒内给出两个时间戳之间的区别,或者我需要在PHP中执行此操作?如果是这样,我将如何做到这一点?
答案 0 :(得分:142)
您可以使用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 suggested:
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
值已经存储为一个整数,表示自以后的秒数时代(Source)。引用docs:
在
UNIX_TIMESTAMP()
列上使用TIMESTAMP
时,该函数直接返回内部时间戳值,没有隐式的“字符串到Unix时间戳”转换。请注意
TIMEDIFF()
return data type ofTIME
。TIME
值的范围可以从'-838:59:59'到'838:59:59'(大约34.96天)
答案 1 :(得分:37)
" 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
答案 2 :(得分:19)
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)
如果您想要无符号差异,请在表达式周围添加ABS()
。
或者,您可以使用TIMEDIFF(ts1, ts2)
,然后使用TIME_TO_SEC()
将时间结果转换为秒。
答案 3 :(得分:7)
请注意TIMEDIFF()
解决方案只适用于datetimes
少于35天的情况!
TIMEDIFF()
返回TIME
数据类型,TIME的最大值为838:59:59小时(= 34,96天)