代码之家  ›  专栏  ›  技术社区  ›  Matt Sheppard

PHP中的UTC偏移量

  •  31
  • Matt Sheppard  · 技术社区  · 17 年前

    相对于当前(系统)时区,用PHP获取UTC偏移量的最简单方法是什么?

    7 回复  |  直到 7 年前
        1
  •  67
  •   Czimi    17 年前
      date('Z');
    

    返回以秒为单位的UTC偏移量。

        2
  •  21
  •   Anonymous    7 年前
    // will output something like +02:00 or -04:00
    echo date('P');
    
        3
  •  17
  •   John Millikin    17 年前

    timezone_offset_get()

    $this_tz_str = date_default_timezone_get();
    $this_tz = new DateTimeZone($this_tz_str);
    $now = new DateTime("now", $this_tz);
    $offset = $this_tz->getOffset($now);
    

    未经测试,但应该有效

        4
  •  12
  •   Kenny    10 年前

    我做了一个稍微修改过的版本。

    date_default_timezone_set('America/New_York');
    $utc_offset =  date('Z') / 3600;
    

    这给了我从东部时区到UTC的时差,以小时为单位。

    $utc_offset的值为-4。

        5
  •  4
  •   HMagdy    7 年前

    简单来说,您可以这样做:

    //Object oriented style
    function getUTCOffset_OOP($timezone)
    {
        $current   = timezone_open($timezone);
        $utcTime  = new \DateTime('now', new \DateTimeZone('UTC'));
        $offsetInSecs =  $current->getOffset($utcTime);
        $hoursAndSec = gmdate('H:i', abs($offsetInSecs));
        return stripos($offsetInSecs, '-') === false ? "+{$hoursAndSec}" : "-{$hoursAndSec}";
    }
    
    //Procedural style
    function getUTCOffset($timezone)
    {
        $current   = timezone_open($timezone);
        $utcTime  = new \DateTime('now', new \DateTimeZone('UTC'));
        $offsetInSecs =  timezone_offset_get( $current, $utcTime);
        $hoursAndSec = gmdate('H:i', abs($offsetInSecs));
        return stripos($offsetInSecs, '-') === false ? "+{$hoursAndSec}" : "-{$hoursAndSec}";
    }
    
    
    $timezone = 'America/Mexico_City';
    
    echo "Procedural style<br>";
    echo getUTCOffset($timezone); //-06:00
    echo "<br>";
    echo "(UTC " . getUTCOffset($timezone) . ") " . $timezone; // (UTC -06:00) America/Mexico_City
    echo "<br>--------------<br>";
    echo "Object oriented style<br>";
    echo getUTCOffset_OOP($timezone); //-06:00
    echo "<br>";
    echo "(UTC " . getUTCOffset_OOP($timezone) . ") " . $timezone; // (UTC -06:00) America/Mexico_City
    
        6
  •  2
  •   Sos.    7 年前

    这是相同的javascript date.getTimezoneOffset() 功能:

    <?php
    echo date('Z')/-60;
    ?>
    
        7
  •  -4
  •   Amr    13 年前

    date("Z") 将返回相对于服务器时区的UTC偏移量,而不是用户的计算机时区。要获取用户的机器时区,可以使用javascript getTimezoneOffset() 函数,以分钟为单位返回UTC时间和本地时间之间的时差。

    <script type="text/javascript">
        d = new Date();
        window.location.href = "page.php?offset=" + d.getTimezoneOffset();
    </script>
    

    而在 page.php 它保存了你的PHP代码,你可以用这个偏移值做任何你想做的事情。或者,您可以根据需要通过Ajax将偏移值发送到PHP脚本,而不是重定向到另一个页面。