PHP で次のリストからタイムゾーン識別子が与えられている場合、特定の GMT 日付を現地時間に変換するのは非常に簡単です: http://www.php.net/manual/en/timezones.php
たとえば、これを行うことができます (ここで、$fromTimeZone は単に 'GMT' であり、$toTimeZone はそのリストの定数の 1 つ (つまり 'America/Chicago') であり、$datetime は GMT の日付です):
public static function convertToTimezone($datetime, $fromTimeZone, $toTimeZone, $format = 'Y-m-d H:i')
{
// Construct a new DateTime object from the given time, set in the original timezone
$convertedDateTime = new DateTime($datetime, timezone_open($fromTimeZone));
// Convert the published date to the new timezone
$convertedDateTime->setTimezone(timezone_open($toTimeZone));
// Return the udpated date in the format given
return $convertedDateTime->format($format);
}
ただし、タイムゾーンのオフセットが与えられた場合、同じ GMT 日付を現地時間に変換する際に問題が発生します。たとえば、'America/Chicago' を指定する代わりに、-0500 を指定します (これは、そのタイムゾーンの同等のオフセットです)。
私は次のようなことを試しました ($datetime は私の GMT 日付で、$toTimeZone はオフセット (この場合は -0500) です):
date($format, strtotime($datetime . ' ' . $toTimeZone))
すべての date() 種類の関数がサーバーのタイムゾーンに基づいていることは知っています。それを無視して、明示的に指定されたタイムゾーンオフセットを使用することはできないようです。