2011-05-16 20 views
32

me sale un campo de fecha y hora, que es actualmente en la consulta como:¿Cómo restar 3 horas de una fecha y hora en MySQL?

SELECT DATE_FORMAT(x.date_entered, '%Y-%m-%d') AS date FROM x ORDER BY date ASC 

Lo que quiero hacer es restar 3 horas siguientes a dicha fecha (cuestiones GMT), pero no puede hacerlo en PHP como PHP solo conoce la parte de la fecha, no la hora.

Respuesta

59

MySQL tiene DATE_SUB():

SELECT DATE_SUB(column, INTERVAL 3 HOUR).... 

pero ¿no sería mejor tratar de resolver el problema subyacente de zona horaria en su lugar?

+0

Bueno, la GMT no es exactamente una cosa que puedo cambiar (maldito legado) pero la forma de conseguir que la en el formato que necesito? '% Y-% m-% d' –

+0

@Lucas No estoy seguro de por qué está haciendo un' DATE_FORMAT() 'en primer lugar - ¿' DATE (x.date_entered) 'ya no lo haría? La última línea sería 'DATE (DATE_SUB (x.date_entered, INTERVAL 3 HOUR))' –

+0

Quería preformatear la fecha en el formato que quería (YYYY/MM/DD), pero no estaba seguro de cómo para hacerlo en PHP, entonces lo hice usando SQL. –

0

Asumiendo que tiene algún problema de zona horaria y saber fuente y la zona horaria de destino, puede convertirlo al igual que

SELECT DATE_FORMAT(CONVERT_TZ(x.date_entered, 'UTC', 'Europe/Berlin'), 
        '%Y-%m-%d') AS date 
FROM x ORDER BY date ASC; 
Cuestiones relacionadas