我在MySQL Server 5.1中创建了一个存储过程。将时间戳转换为X天X小时X分钟前
如何将时间戳转换为代表该时间戳与现在时间之间的天数,小时数和分钟差的字符串?
例如,如果时间戳是5小时,3分钟前我会'5小时3分钟前'。
我在MySQL Server 5.1中创建了一个存储过程。将时间戳转换为X天X小时X分钟前
如何将时间戳转换为代表该时间戳与现在时间之间的天数,小时数和分钟差的字符串?
例如,如果时间戳是5小时,3分钟前我会'5小时3分钟前'。
select date_format(timediff(current_timestamp,last_timestamp),
'%k hours, %i minutes, %s seconds ago');
如果你想要更多的奢侈品,你可以做类似:
select concat
(
if(date_format(timediff(ts1,ts2)'%k')='0'
,'',date_format(timediff(ts1,ts2)'%k hours'),
if(date_format(timediff(ts1,ts2)'%i')='0'
,'',date_format(timediff(ts1,ts2)'%k minutes'),
if(date_format(timediff(ts1,ts2)'%s')='0'
,'',date_format(timediff(ts1,ts2)'%k seconds')
)
再加上一些额外的空间在这里和那里。
如果其中一个时间戳记为null
自然结果也将为空,您必须确保它不是,或使用ifnull(`timestamp`,now())
来解决该问题。
参见:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff
看一看日期和时间功能MySQL参考页在
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_from-unixtime
编辑:既然我假设你正在使用Unix的时间戳,要走的路是
FROM_UNIXTIME(timestamp, format)
我得到空当我尝试执行此功能。除此之外,如果它是在3分钟前创建的,我不想写入0小时。只有3分钟前没有小时字符串。 – ufk
真棒!非常感谢! – ufk
只需要注意,对于大于35天的时间差异,'TIMEDIFF'函数将[只返回最大838:59:59](http://dev.mysql.com/doc/refman/5.7/en /time.html)。有关详细信息,请参见[本文](http://www.microshell.com/database/mysql/getting-around-mysql-timediff-maximum-value-of-8385959/)。 – JYelton