0

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() 種類の関数がサーバーのタイムゾーンに基づいていることは知っています。それを無視して、明示的に指定されたタイムゾーンオフセットを使用することはできないようです。

4

1 に答える 1

0

特定のオフセットを DateTimeZone に変換できます。

$offset = '-0500';
$isDST = 1; // Daylight Saving 1 - on, 0 - off
$timezoneName = timezone_name_from_abbr('', intval($offset, 10) * 36, $isDST);
$timezone = new DateTimeZone($timezoneName);

次に、DateTime コンストラクターで使用できます。

$datetime = new DateTime('2012-04-21 01:13:30', $timezone);

またはセッターで:

$datetime->setTimezone($timezone);

後者の場合、$datetime異なるタイムゾーンで構築された場合、日付/時刻は指定されたタイムゾーンに変換されます。

于 2012-04-20T23:20:32.527 に答える