17

私はphpの専門家ではありません。PHP でタイムゾーンがサポートされていることは知っています。

PHP でサポートされている特定のタイムゾーン TZ の場合、既知の UTC (つまり GMT+0) へのオフセット (つまり、加算または減算する時間と分) を取得して、TZ ゾーンでその時刻を取得する必要があります。

どうすればこれを達成できますか?最終的に、PHP でサポートされているすべてのタイムゾーンのオフセットを取得する必要があります。ありがとう。

4

5 に答える 5

26

これは、計算を行わずにオフセット値を GMT 形式に変換するのに役立ちます。

<?php

  //target time zone
  $target_time_zone = new DateTimeZone('America/Los_Angeles');

  //find kolkata time 
  $date_time = new DateTime('now', $target_time_zone);

  //get the exact GMT format
  echo 'GMT '.$date_time->format('P');
于 2014-01-09T10:44:31.440 に答える
24

これは、タイムゾーンのオフセットを秒単位で取得する簡単な例です。

$dtz = new DateTimeZone('Europe/Sofia');
$time_in_sofia = new DateTime('now', $dtz);
echo $dtz->getOffset( $time_in_sofia );

GMT+x の形式で表示するには:

$offset = $dtz->getOffset( $time_in_sofia ) / 3600;
echo "GMT" . ($offset < 0 ? $offset : "+".$offset);

実施例

于 2012-02-04T12:27:29.173 に答える
14

これにより、標準のオフセットが取得されます(DSTの内外ではありません[時期によって異なります]):

function getStandardOffsetUTC($timezone)
{
    if($timezone == 'UTC') {
        return '';
    } else {
        $timezone = new DateTimeZone($timezone);
        $transitions = $timezone->getTransitions(time() - 86400*365, time());

        foreach ($transitions as $transition)
        {
            if ($transition['isdst'])
            {
                continue;
            }

            return sprintf('UTC %+03d:%02u', $transition['offset'] / 3600, abs($transition['offset']) % 3600 / 60);
        }

        return false;
    }
}

使用法:

echo getStandardOffsetUTC('Europe/Sofia'); // UTC +02:00

ここで違いを確認できます。

于 2012-11-03T03:31:08.397 に答える
11

次の一行だけで可能です。

echo (new DateTime('now', new DateTimeZone( 'Asia/Kabul' )))->format('P');
于 2016-10-23T15:33:41.263 に答える
3

PHP でサポートされているすべてのタイムゾーン:

$timezone_offsets = array();

foreach(timezone_identifiers_list() as $timezone_identifier)
{
    $date_time_zone = new DateTimeZone($timezone_identifier);
    $date_time = new DateTime('now', $date_time_zone);
    $timezone_offsets[$timezone_identifier] = $date_time_zone->getOffset($date_time);
}

print_r($timezone_offsets);
于 2012-02-04T12:41:57.700 に答える