2009-09-17 16 views
41

Tengo un campo de fecha y hora (endTime) en mysql. Yo uso gmdate() para llenar este campo endTime.agregando 30 minutos a datetime php/mysql

El valor almacenado es algo así como 2009-09-17 04:10:48. Quiero agregar 30 minutos a este tiempo de finalización y compararlo con la hora actual. es decir, el usuario puede hacer una determinada tarea solo 30 minutos dentro de su endTime. Después de 30 minutos de su endTime, no debería permitirle hacer una tarea.

¿cómo puedo hacer eso en php?

uso gmdate para asegurarme de que no haya diferencias de zona.

Gracias de antemano

Respuesta

96

Si está utilizando MySQL puede hacerlo de esta manera:

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


Para una utilización solución pura PHP strtotime

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

que MySQL truco es impresionante. Nunca supe de eso. – jocull

5

MySQL tiene una función llamado ADDTIME para sumar dos veces, para que pueda hacer todo en MySQL (pr siempre que esté usando> = MySQL 4.1.3).

Algo así (no probado):

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

Vine aquí buscando una forma genérica de agregar variables a datetime, y solo esta respuesta funcionó para mí. – kurast

42

Prueba este

DATE_ADD(datefield, INTERVAL 30 MINUTE) 
5

Dominc tiene la idea correcta, pero puso el cálculo en el otro lado de la expresión.

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

Esto tiene la ventaja de que está haciendo el cálculo de 30 minutos una vez en lugar de hacerlo en cada fila. Eso también significa que MySQL puede usar el índice en esa columna. Ambos te dan una aceleración.

2

función Uso DATE_ADD

DATE_ADD(datecolumn, INTERVAL 30 MINUTE); 
Cuestiones relacionadas