MySQL:如何在几秒钟内获得两个时间戳之间的差异

The*_*i.9 86 php mysql timestamp

有没有办法可以在MySQL中进行查询,以便在几秒钟内给出两个时间戳之间的区别,或者我需要在PHP中执行此操作?如果是这样,我将如何做到这一点?

Dan*_*llo 154

您可以使用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)
Run Code Online (Sandbox Code Playgroud)

您也可以在其他答案中使用@Amber建议UNIX_TIMESTAMP()功能:

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)
Run Code Online (Sandbox Code Playgroud)

如果您正在使用TIMESTAMP数据类型,我想UNIX_TIMESTAMP()解决方案会稍快一些,因为TIMESTAMP值已经存储为一个整数,表示自纪元以来的秒数(来源).引用文档:

UNIX_TIMESTAMP()TIMESTAMP列上使用时,该函数直接返回内部时间戳值,没有隐式的"字符串到Unix时间戳"转换.

请记住,TIMEDIFF() 返回数据类型TIME.TIME值可以从'-838:59:59'到'838:59:59'(大约34.96天)

  • 你也可以使用[TIMESTAMPDIFF](http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timestampdiff),它在一个函数中完成它 - 只需设置`unit`参数为`SECOND`. (11认同)

Dav*_*vid 43

"TIMESTAMPDIFF"怎么样:

SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
Run Code Online (Sandbox Code Playgroud)

https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff


Amb*_*ber 20

UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)
Run Code Online (Sandbox Code Playgroud)

如果您想要无符号差异,请ABS()在表达式周围添加.

或者,您可以使用TIMEDIFF(ts1, ts2)然后将时间结果转换为秒TIME_TO_SEC().


Pow*_*ing 9

需要注意的是,TIMEDIFF()当溶液只能datetimes小于35天分开! TIMEDIFF()返回TIME数据类型,TIME最大值为838:59:59小时(= 34,96天)