I find myself using unix timestamps to store dates in
unsigned ints instead of the MySQL date type. It has less trouble with timezone of the db vs timezone of the web server. Besides, to display a localized format and timezome I need to convert through a unix timestamp anyway. Intervals are also easier.
WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date_col) > 31*86400;