我能否在MySQL中查询两个时间戳之间的秒数差异,还是需要在PHP中进行处理?如果需要,在PHP中应该如何处理呢?
你可以使用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)
你还可以像@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)
如果您在使用TIMESTAMP
数据类型,我认为UNIX_TIMESTAMP()
解决方案可能会稍微快一些,因为TIMESTAMP
值已经存储为表示自纪元以来的秒数的整数(来源)。引用文档:
当
UNIX_TIMESTAMP()
用于TIMESTAMP
列时,该函数直接返回内部时间戳值,没有隐含的“字符串到Unix时间戳”的转换。请记住,
TIMEDIFF()
返回TIME
数据类型。TIME
值可以范围从 '-838:59:59' 到 '838:59:59' (大约34.96天)
那么"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
str_to_date(date_column, '%m/%d/%Y')
。 - greaterKingTIME_TO_SEC
最大值为 3020399
,而这个函数可以返回正确的值。 - But those new buttons though..UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)
如果你想得到无符号差异,可以在表达式周围添加ABS()
。
另外,你也可以使用 TIMEDIFF(ts1, ts2)
然后用 TIME_TO_SEC()
将时间结果转换为秒。
TIMEDIFF()
方法仅适用于两个datetimes
时间间隔小于35天的情况!
TIMEDIFF()
返回TIME
数据类型,而TIME
数据类型的最大值为838:59:59小时(即34.96天)。
unit
参数设置为SECOND
即可。 - Mike