In MYSQL 5 and above, TIMESTAMP values are converted from the current time zone to UTC for storage, and converted back from UTC to the current time zone for retrieval. (This occurs only for the TIMESTAMP data type, and not for other types such as DATETIME.)
However, from useability perspective, DATETIME works in all varied scenarios and you can choose to use the native MYSQL functions like DATE_ADD(my_datetime, INTERVAL 1 DAY).
The TIMESTAMP on the contrary has a few restrictions:
[list]
The TIMESTAMP data type has a range of ‘1970-01-01 00:00:01’ UTC to ‘2038-01-09 03:14:07’ UTC. It has varying properties, depending on the MySQL version and the SQL mode the server is running in.
The supported range for DATETIME is ‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’.
You’re quite likely to hit the lower limit on TIMESTAMPs in general use – e.g. storing birth date.
[/list]
To make my code accessible across scenarios, I tend to use DATETIME in the DB for many cases - and do the formatting of the date via PHP for display.
You may want to create a global helper class for formatting dates before displaying it to the client. Something like:
class MyDate
{
public static function format($date) {
$time = strtotime($date.' UTC');
return date("Y-m-d H:i:s", $time);
}
}