MySQL:如何在几秒钟内获得两个时间戳之间的差异
有没有一种方法可以在MySQL中进行查询,这会在几秒钟内给出两个时间戳之间的差异,还是我需要在PHP中执行该操作? 如果是的话,我将如何去做呢?
您可以使用TIMEDIFF()
和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()
函数作为另一个答案中build议的@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
数据types,那么我猜测UNIX_TIMESTAMP()
解决scheme会稍微快一点,因为TIMESTAMP
值已经被存储为一个整数,表示从epoch( Source )开始的秒数。 引用文档 :
当在
TIMESTAMP
列上使用UNIX_TIMESTAMP()
,该函数将直接返回内部时间戳值,而不会有隐式的“string到Unix时间戳”的转换。请记住,
TIMEDIFF()
返回TIME
数据types 。TIME
值可以从'-838:59:59'到'838:59:59'(大约34.96天)
如何“TIMESTAMPDIFF”:
SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
http://www.w3resource.com/mysql/date-and-time-functions/mysql-timestampdiff-function.php
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)
如果你想要一个无符号的差异,在expression式周围添加一个ABS()
。
或者,您可以使用TIMEDIFF(ts1, ts2)
,然后使用TIMEDIFF(ts1, ts2)
将时间结果转换为秒。
请注意, TIMEDIFF()
解决scheme仅适用于datetimes
时间相隔不足35天的情况 ! TIMEDIFF()
返回TIME
数据types, TIME
的最大值是838:59:59小时(= 34,96天)