2009-09-17 13 views
41

mysqlに日時フィールド(endTime)があります。私はgmdate()を使用してこのendTimeフィールドに値を設定します。datetimeに30分追加php/mysql

保存された値は、2009-09-17 04:10:48のようなものです。このエンドタイムに30分を追加して、現在の時間と比較したいと思います。すなわち、ユーザは、彼のendTime内で30分だけ特定のタスクを実行することが許可される。彼のendTimeの30分後、私は彼に仕事をさせるべきではありません。

私はどのようにPHPでそれを行うことができますか?

私はgmdateを使用してゾーンの違いがないことを確認しています。事前

答えて

96

おかげであなたはMySQLを使用している場合はこのようにそれを行うことができます。

SELECT '2008-12-31 23:59:59' + INTERVAL 30 MINUTE; 


を純粋なPHPソリューションの使用についてstrtotime

strtotime('+ 30 minute',$yourdate); 
+6

。それについては決して知らなかった。 – jocull

5

MySQLは機能を持っています2回追加するためのADDTIMEと呼ばれています。つまり、MySQLですべてのことを行うことができます(prあなたは> = MySQL 4.1.3を使用しています)。 (未テスト)のような

何か:

SELECT * FROM my_table WHERE ADDTIME(endTime + '0:30:00') < CONVERT_TZ(NOW(), @@global.time_zone, 'GMT') 
+0

ここでは、datetime変数に追加する一般的な方法を探していましたが、この回答のみが私のために働いていました。 – kurast

42

この1

DATE_ADD(datefield, INTERVAL 30 MINUTE) 
5

Domincは正しい考えを持っていますが、表現の反対側に計算を入れてみてください。

SELECT * FROM my_table WHERE endTime < DATE_SUB(CONVERT_TZ(NOW(), @@global.time_zone, 'GMT'), INTERVAL 30 MINUTE) 

これは、すべての行ではなく1回30分の計算を実行するという利点があります。これは、MySQLがその列でインデックスを使用できることも意味します。両方とも、あなたにスピードアップを与えます。 MySQLのトリックは素晴らしいされていることを

2

使用DATE_ADD機能

DATE_ADD(datecolumn, INTERVAL 30 MINUTE); 
関連する問題