如何在查询中分割以天,小时,分钟,秒为单位的剩余时间

时间:2013-05-23 05:26:03

标签: php mysql

以下是我的表结构

enter image description here

现在我需要一个查询,我可以显示该事件的日期,时间,分钟,秒。

我使用了这个查询

select title,`date`,subject ,TIMESTAMPDIFF(DAY, CONVERT_TZ(NOW(),@@session.time_zone, '+05:30'),'2013-05-25 12:00:00')  as dayleft ,TIMESTAMPDIFF(HOUR, CONVERT_TZ(NOW(),@@session.time_zone, '+05:30'),'2013-05-25 12:00:00')  as hourleft from jos_holidays where `date` > CONVERT_TZ(NOW(),@@session.time_zone, '+05:30')

以上结果我

enter image description here

但是我需要准确的剩余时间包括天,小时,分钟和秒,并将其显示在单独的列中。我可以在查询中找到这个吗?虽然这可以在PHP中实现。

此外,查询中的日期"2013-05-25 12:00:00"值是硬编码的。也可以让它变得动态。

由于

4 个答案:

答案 0 :(得分:1)

查询:

<强> SQLFIDDLEExample

SELECT title,
       `date`,
       subject ,
       TIMESTAMPDIFF(DAY, CONVERT_TZ(NOW(),@@session.time_zone, '+05:30'), `date`) AS dayleft,
       TIMESTAMPDIFF(HOUR, CONVERT_TZ(NOW(),@@session.time_zone, '+05:30'), `date`)
       - TIMESTAMPDIFF(DAY, CONVERT_TZ(NOW(),@@session.time_zone, '+05:30'), `date`)*24 AS hourleft,
       TIMESTAMPDIFF(MINUTE, CONVERT_TZ(NOW(),@@session.time_zone, '+05:30'),  `date`) -
       TIMESTAMPDIFF(HOUR, CONVERT_TZ(NOW(),@@session.time_zone, '+05:30'), `date`)* 60 AS minuteleft,
       TIMESTAMPDIFF(SECOND, CONVERT_TZ(NOW(),@@session.time_zone, '+05:30'), `date`)- 
       TIMESTAMPDIFF(MINUTE, CONVERT_TZ(NOW(),@@session.time_zone, '+05:30'),  `date`)*60 AS secondleft
FROM jos_holidays
WHERE `date` > CONVERT_TZ(NOW(),@@session.time_zone, '+05:30')

答案 1 :(得分:0)

尝试

$diff = strtotime($date) - time();
echo "tile left is ".date('Y-m-d H-m-i',$diff);

答案 2 :(得分:0)

在PHP中,您可以使用

$now = new DateTime(); // or use any start date you want
$date = new DateTime($row['date']); // your sql query result
$diff = $now->diff($date);

这使$ diff成为DateInterval对象,其中包含您要查找的所有信息。它需要PHP 5.3 +。

我不确定是否可以直接从MySQL获取相同的信息。但我认为它主要用于显示目的,因此在PHP中根据可用信息进行计算并不会产生太大的开销。

答案 3 :(得分:0)

我使用此查询的工作

 SELECT 
    TIMESTAMPDIFF(DAY,NOW(),'2013-06-23') AS dafLeft, 
    TIMESTAMPDIFF(HOUR,NOW(),'2013-06-23')-TIMESTAMPDIFF(DAY,NOW(),'2013-06-23')*24 AS hourLeft,
    TIMESTAMPDIFF(MINUTE,NOW(),'2013-06-23')-TIMESTAMPDIFF(HOUR,NOW(),'2013-06-23')*60 AS minLeft,
    TIMESTAMPDIFF(SECOND,NOW(),'2013-06-23')-TIMESTAMPDIFF(MINUTE,NOW(),'2013-06-23')*60 AS secLeft;

For dynamic just '2013-06-23' to your field name (date field name) and fetch like you do in other table.

快乐的编码!! :)