добавление 30 минут к дате / времени php / mysql - PullRequest
48 голосов
/ 17 сентября 2009

У меня есть поле даты и времени (endTime) в MySQL. Я использую gmdate () для заполнения этого поля endTime.

Сохраненное значение - что-то вроде 2009-09-17 04:10:48. Я хочу добавить 30 минут к этому конечному времени и сравнить его с текущим временем. т. е. пользователю разрешено выполнять определенную задачу только в течение 30 минут в течение его конечного времени. Через 30 минут после его окончания я не должен позволять ему выполнять задачу.

как я могу сделать это в php?

Я использую gmdate, чтобы убедиться в отсутствии различий между зонами.

Заранее спасибо

Ответы [ 5 ]

114 голосов
/ 17 сентября 2009

Если вы используете MySQL , вы можете сделать это так:

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


Для чисто PHP-решения используйте strtotime

strtotime('+ 30 minute',$yourdate);
46 голосов
/ 17 сентября 2009

Попробуйте это

DATE_ADD(datefield, INTERVAL 30 MINUTE)
5 голосов
/ 17 сентября 2009

Доминк имеет правильное представление, но поместите вычисление на другую сторону выражения.

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

Преимущество состоит в том, что вы выполняете 30-минутный расчет один раз вместо каждого ряда. Это также означает, что MySQL может использовать индекс для этого столбца. И то, и другое дает вам ускорение.

5 голосов
/ 17 сентября 2009

MySQL имеет функцию с именем ADDTIME, которая позволяет добавлять два значения вместе - так что вы можете делать все это в MySQL (при условии, что вы используете> = MySQL 4.1.3).

Что-то вроде (не проверено):

SELECT * FROM my_table WHERE ADDTIME(endTime + '0:30:00') < CONVERT_TZ(NOW(), @@global.time_zone, 'GMT')
3 голосов
/ 15 ноября 2016

Использовать функцию DATE_ADD

DATE_ADD(datecolumn, INTERVAL 30 MINUTE);
...