如何从PHP中检索GMT + 0的时区偏移量?

时间:2012-02-04 12:14:45

标签: php timezone-offset

我不是php的专家。我知道PHP中的时区是supported

对于PHP支持的给定时区TZ,我需要检索已知UTC(即GMT + 0)的偏移量(即,添加或减去的小时数和分钟数)以在TZ区域中获得该时间。

我怎样才能做到这一点?最终,我需要在PHP中为所有支持的时区获取这些偏移量。谢谢。

5 个答案:

答案 0 :(得分:20)

这是一个简单的例子,说明如何以秒为单位获取时区偏移量:

$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);

working example

答案 1 :(得分:20)

这对于将偏移值转换为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');

答案 2 :(得分:14)

这将为您提供标准偏移(不是 <{3}} 中的 [取决于一年中的时间]):

function getStandardOffsetUTC($timezone)
{
    if($timezone == 'UTC') {
        return '';
    } else {
        $timezone = new DateTimeZone($timezone);
        $transitions = array_slice($timezone->getTransitions(), -3, null, true);

        foreach (array_reverse($transitions, true) as $transition)
        {
            if ($transition['isdst'] == 1)
            {
                continue;
            }

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

        return false;
    }
}

用法:

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

您可以查看差异DST

答案 3 :(得分:5)

可以通过以下单行进行。

echo (new DateTime('now', new DateTimeZone( 'Asia/Kabul' )))->format('P');

答案 4 :(得分:2)

对于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);