I am storing dates in a MySQL database in datetime fields in UTC. I'm using PHP, and I've called date_timezone_set('UTC') so that all calls to date() (without timestamp) return the date in UTC.
I then have it so a given web site can select its timezone. Now I want dates to display in the site's timezone. So, if I have a date stored as '2009-04-01 15:36:13', it should display for a user in the PDT timezone (-7 hours) as '2009-04-01 08:36:13'.
What is the easiest (least code) method for doing this via PHP? So far all I've thought of is
date('Y-m-d H:i:s', strtotime($Site->getUTCOffset() . ' hours', strtotime(date($utcDate))));
Is there a shorter way?
Here's what we did with our servers. We set everything to use UTC, and we display in the user's time zone by converting from UTC on the fly. The code at the bottom of this post is an example of how to get this to work; you should confirm that it works in all cases with your setup (i.e. daylight savings, etc).
Configuring CentOS
/etc/sysconfig/clock
and setZONE
toUTC
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
Configuring MySQL
Import timezones into MySQL if necessary:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Edit my.cnf and add the following within the [mysqld] section:
default-time-zone = 'UTC'
PHP Code