2

下面是我的表结构

在此处输入图像描述

现在我需要一个查询,我可以显示该事件的天数、小时数、分钟数、秒数。

我用过这个查询

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')

以上结果是我

在此处输入图像描述

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

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

谢谢

4

4 回答 4

1

询问:

SQLFIDDLE示例

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')
于 2013-05-23T06:46:11.947 回答
0

试试喜欢

$diff = strtotime($date) - time();
echo "tile left is ".date('Y-m-d H-m-i',$diff);
于 2013-05-23T05:31:08.860 回答
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 中根据可用信息计算它并没有太多开销。

于 2013-05-23T05:48:04.390 回答
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.

编码快乐!!:)

于 2013-05-23T06:38:16.460 回答