Feb 282012
Timezone handling can sometimes be a bitch. Turns out, using a couple of PHPs classes and functions, it’s quite easy.
Let’s say you have a web application with the following scenario:
Users from around the planet, and your server is located in the UK.
You would initialize your DateTime object like this:
$timezoneUTC = new DateTimeZone('UTC'); $dateTime = new DateTime('2012-02-23 10:22', $timezoneUTC); echo $dateTime->format('Y-m-d H:i e').'<br/>';
This should output:
2012-02-23 10:22 UTC
For an international user, seeing his or her local time would be nice.
To do this, simply change the timezone of the existing DateTime object, like this:
$timeZoneSweden = new DateTimeZone('Europe/Stockholm'); $dateTime->setTimeZone($timeZoneSweden); echo $dateTime->format('Y-m-d H:i e').'<br/>'; $timeZoneNY = new DateTimeZone('America/New_York'); $dateTime->setTimeZone($timeZoneNY); echo $dateTime->format('Y-m-d H:i e').'<br/>'; $timeZoneBKK = new DateTimeZone('Asia/Bangkok'); $dateTime->setTimeZone($timeZoneBKK); echo $dateTime->format('Y-m-d H:i e').'<br/>';
This should output:
2012-02-23 11:22 Europe/Stockholm
2012-02-23 05:22 America/New_York
2012-02-23 17:22 Asia/Bangkok
The final code should look something like this:
$timezoneUTC = new DateTimeZone('UTC'); $timeZoneSweden = new DateTimeZone('Europe/Stockholm'); $dateTime = new DateTime('2012-02-23 10:22', $timezoneUTC); $dateTime->setTimeZone($timeZoneSweden);
This will leave a DateTime object set with the users timezone.
And that’s it.