2009-09-17 11 views
41

J'ai un champ datetime (endTime) dans mysql. J'utilise gmdate() pour remplir ce champ endTime.ajoutant 30 minutes à datetime php/mysql

La valeur stockée est quelque chose comme 2009-09-17 04:10:48. Je veux ajouter 30 minutes à cette fin et le comparer avec l'heure actuelle. ie) l'utilisateur est autorisé à faire une certaine tâche seulement 30 minutes dans son endTime. Après 30 minutes de son endTime, je ne devrais pas lui permettre de faire une tâche.

comment puis-je faire cela en PHP? J'utilise gmdate pour m'assurer qu'il n'y a pas de différences de zone.

Merci à l'avance

Répondre

96

Si vous utilisez MySQL vous pouvez le faire comme ceci:

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


Pour une solution PHP pur utilisation strtotime

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

Cette astuce MySQL est génial. Je n'ai jamais connu celui-là. – jocull

5

MySQL a une fonction appelé ADDTIME pour ajouter deux fois ensemble - de sorte que vous pouvez faire le tout dans MySQL (pr ovided vous utilisez> = MySQL 4.1.3).

Quelque chose comme (non testé):

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

Je suis venu ici à la recherche d'un moyen générique d'ajouter des variables datetime, et seule cette réponse a fonctionné pour moi. – kurast

42

Essayez celui

DATE_ADD(datefield, INTERVAL 30 MINUTE) 
5

Dominc a la bonne idée, mais mettre le calcul de l'autre côté de l'expression.

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

Ceci a l'avantage de faire le calcul de 30 minutes une fois plutôt que sur chaque ligne. Cela signifie également que MySQL peut utiliser l'index sur cette colonne. Les deux vous donnent une accélération.

2

Utilisez la fonction DATE_ADD

DATE_ADD(datecolumn, INTERVAL 30 MINUTE); 
Questions connexes