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天)