【发布时间】:2011-11-24 21:51:11
【问题描述】:
我正在使用 php。我有一个表事件。其中有 EventID、EventName 和 EventTime 三个字段。
我在 EventTime 字段中使用了 datetime 格式。
现在我想编写一个返回当前时间和事件时间之间差异的查询。
我希望我的结果打印如下:- eventID 发生在 1 小时 20 分钟前。
请建议我该怎么做。
提前谢谢你。
【问题讨论】:
我正在使用 php。我有一个表事件。其中有 EventID、EventName 和 EventTime 三个字段。
我在 EventTime 字段中使用了 datetime 格式。
现在我想编写一个返回当前时间和事件时间之间差异的查询。
我希望我的结果打印如下:- eventID 发生在 1 小时 20 分钟前。
请建议我该怎么做。
提前谢谢你。
【问题讨论】:
试试这个 -
SELECT EventID, TIME_FORMAT(TIMEDIFF(NOW(), EventTime), 'occured %H hour %i minutes ago') diff FROM table;
SELECT EventID, CONCAT('occured ', hours, IF(hours > 1, ' hours ', ' hour '), minutes, IF(minutes > 1, ' minutes', ' minute'), ' ago') FROM (
SELECT EventID,
@diff:=TIMEDIFF(NOW(), EventTime),
EXTRACT(HOUR FROM @diff) hours,
EXTRACT(MINUTE FROM @diff) minutes
FROM EVENT) t;
【讨论】:
CONCAT 部分可以更改为:CONCAT('occured', CASE WHEN hours = 0 THEN '' WHEN hours = 1 THEN CONCAT(' ', hours, ' hour') ELSE CONCAT(' ', hours, ' hours') END, CASE WHEN minutes = 0 THEN '' WHEN minutes = 1 THEN CONCAT(' ', minutes, ' minute') ELSE CONCAT(' ', minutes, ' minutes') END, ' ago')
我完全是这样完成的:-
SELECT
placeID,
IF(TIMEDIFF(NOW(), comment_datetime) > '01:00:00',
TIME_FORMAT(TIMEDIFF(NOW(), comment_datetime), 'occured %H hour %i minutes ago'),
TIME_FORMAT(TIMEDIFF(NOW(), comment_datetime), '%i minutes ago')
) diff
FROM
place_comments;
【讨论】: