2009-09-17 13 views
41

Mam pole datetime (endTime) w mysql. Używam gmdate() do wypełnienia pola endTime.Dodawanie 30 minut do datetime php/mysql

Zapisana wartość to coś w stylu 2009-09-17 04:10:48. Chcę dodać 30 minut do tego czasu zakończenia i porównać go z bieżącym czasem. tj.) użytkownik może wykonać określone zadanie tylko 30 minut w swoim timeTime. Po 30 minutach jego endTime, nie powinienem pozwolić mu na wykonanie zadania.

Jak mogę to zrobić w php?

Używam gmdate, aby się upewnić, że nie ma różnic w strefach.

góry dzięki

Odpowiedz

96

Jeśli używasz MySQL można zrobić to tak:

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


przypadku użycia roztwór czystego PHP strtotime

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

że MySQL Sztuką jest niesamowite. Nigdy o tym nie wiedziałem. – jocull

5

MySQL ma funkcję o nazwie ADDTIME do dodawania dwa razy razem - dzięki czemu można zrobić całą rzecz w MySQL (pr owtowany używasz> = MySQL 4.1.3).

Coś (niesprawdzone):

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

Przyszedłem tutaj, szukając ogólnego sposobu dodawania zmiennych do datetime, i tylko ta odpowiedź działała dla mnie. – kurast

42

Spróbuj ten

DATE_ADD(datefield, INTERVAL 30 MINUTE) 
5

Dominc ma prawo pomysł, ale umieścić obliczenia na drugiej stronie wyrażenia.

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

Ma to tę zaletę, że wykonujesz 30-minutowe obliczenia raz zamiast w każdym rzędzie. Oznacza to również, że MySQL może używać indeksu w tej kolumnie. Oba te dają przyspieszenie.

2

funkcja Zastosowanie DATE_ADD

DATE_ADD(datecolumn, INTERVAL 30 MINUTE); 
Powiązane problemy