Here is a function I used to get around this. You can easily modify the $offsets to get the desired result. I usually get the timezone based on a persons zipcode but that is only for US users. See if this helps:
function format_time($datetime,$timezone="Pacific",$mysqlstamp=0)
{
//Will format date/time based on datetime format in MySQL
switch($timezone)
{
case "Pacific": $offset = 0;
break;
case "Mountain": $offset = 1;
break;
case "Central": $offset = 2;
break;
case "Eastern": $offset = 3;
break;
}
//Convert datetime to unix timestamp
if ($mysqlstamp) $datetime = substr($datetime,0,4) . "-" . substr($datetime,4,2) . "-" . substr($datetime,6,2) . " " .
$timestamp = strtotime($datetime);
//Determine which format to print out date, time or both
if (preg_match("/^0000-00-00/",$datetime) || preg_match("/^00:00:00$/",$datetime))
{
return false;
} else if (preg_match("/^\d\d\d\d[\/\.-]\d\d[\/\.-]\d\d$/",$datetime)) {
return date("m/d/y", $timestamp + ($offset * 3600));
} else if (preg_match("/^\d\d:\d\d:\d\d$/",$datetime)) {
return date("h:i:s A", $timestamp + ($offset * 3600));
} else {
return date("m/d/y h:i:s A", $timestamp + ($offset * 3600));
}
}