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

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

のようにしてみてください

$diff = strtotime($date) - time();
echo "tile left is ".date('Y-m-d H-m-i',$diff);
于 2013-05-23T05:31:08.860 に答える