2011-05-16 152 views
32

我得到一个日期时间字段,这是目前在查询为:如何从MySQL中的日期时间减去3小时?

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

我想要做的就是减去自该日起3小时(格林尼治标准时间问题),但我不能做到这一点在PHP作为PHP只知道日期部分,而不是时间。

回答

59

MySQL有DATE_SUB()

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

,但岂不是更好地尝试和理清基本的时区的问题呢?

+0

嘛GMT是不完全的事情,我可以改变(该死的遗产),但如何获取在我需要的格式? '%Y-%m-%d' – 2011-05-16 16:13:06

+0

@Lucas我不知道你为什么首先在做'DATE_FORMAT()' - DATE(x.date_entered)'不是已经做了吗?最后一行是'DATE(DATE_SUB(x.date_entered,INTERVAL 3 HOUR))' – 2011-05-16 16:16:38

+0

我想以我想要的格式(YYYY/MM/DD)预格式化日期,但我不确定在PHP中这样做,所以我没有使用SQL。 – 2011-05-16 16:19:30

0

假设你有一定的时区的问题,知道的源和目的地时区,你可以把它转换像这样

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