【问题标题】:How can get time difference between current time and eventTime如何获取当前时间和 eventTime 之间的时间差
【发布时间】:2011-11-24 21:51:11
【问题描述】:

我正在使用 php。我有一个表事件。其中有 EventID、EventName 和 EventTime 三个字段。

我在 EventTime 字段中使用了 datetime 格式。

现在我想编写一个返回当前时间和事件时间之间差异的查询。

我希望我的结果打印如下:- eventID 发生在 1 小时 20 分钟前

请建议我该怎么做。

提前谢谢你。

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    试试这个 -

    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;
    

    【讨论】:

    • 如果您想在纯 MySQL 中执行此操作,这可能是最好的方法,据我所知,唯一的缺点是它会返回例如“00 小时 19 分钟前”或“ 07 小时 01 分钟前”。
    • 谢谢您,先生...如果我只想显示“19 分钟前”,如果小时小于 1,我该怎么办?如果小时是 1 或大于 1,那么这也应该显示小时和分钟...
    • @zrvan 你是对的。在这种情况下,我们应该手动检查这些值和格式值。
    • @Pushpendra Kuntal 我又添加了一个查询。
    • @Devart:我对你付出的额外努力印象深刻,所以我采用了你的解决方案并运行它,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')
    【解决方案2】:

    我完全是这样完成的:-

    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;
    

    【讨论】:

      猜你喜欢
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      相关资源
      最近更新 更多