PHP 5.1+ Date vs Strftime Timezone Annoyance
In the old PHP4 days, you could change the default timezone by: putenv("TZ=America/Los_Angeles");. In php5, you can still do this and it’ll work for strtotime, strftime, gmstftime (maybe more). It will not work for methods date and gmdate. For those, starting in version 5.1, you’ll need to call date_default_timezone_set("America/Los_Angeles");. This is just another one of those annoying things that make PHP a dying language.
Together, to be cross-version compliant:
putenv("TZ=America/Los_Angeles"); if( function_exists("date_default_timezone_set") ) { date_default_timezone_set("America/Los_Angeles"); }
We need both to be reverse-compatible with PHP4.
Server Patches and Time Zones
Sometimes, after a server patch, the timezone is reset to Pacific time. Why? I don’t know, but when you patch a machine, be sure to double-check that the time zone after the patch is the same as before the patch. If not, set it.
- Logged in, then
su, check which timezone your machine is currently using by executing `date`. You’ll see something likeMon 17 Jan 2005 12:15:08 PM PST, PST in this case is the current timezone. - Change to the directory
/usr/share/zoneinfohere you will find a list of time zone regions. Choose the most appropriate region, if you live in Canada or the US this directory is the “America” directory. - If you wish, backup the previous timezone configuration by copying it to a different location. Such as
mv /etc/localtime /etc/localtime-old - Create a symbolic link from the appropriate timezone to /etc/localtime. Example:
ln -sf /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime - If you have the utility rdate, update the current system time by executing
/usr/bin/rdate -s time-a.nist.gov - Set the ZONE entry in the file
/etc/sysconfig/clockfile (e.g. “America/Los_Angeles”) - Set the hardware clock by executing:
/sbin/hwclock --systohc