PHP中的UTC偏移量

Ada*_*nst 37 php timezone utc

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

Czi*_*imi 76

  date('Z');
Run Code Online (Sandbox Code Playgroud)

以秒为单位返回UTC偏移量.

  • 谢谢.不幸的是,PHP要求你调用date_default_timezone_set().如果将其设置为GMT,则数据库中的日期仍将是本地时间,但日期('Z')将返回零.如果将其设置为服务器的时区,您可能只需在包含文件中硬编码服务器与GMT的偏移量.令人难以置信的是,没有直接的方法来做到这一点.编辑:我发现你可以做date_default_timezone_set(date_default_timezone_get()).如何asinine! (3认同)
  • Adry,看起来您现在处于 UTC (-; (2认同)

Tuh*_*ari 27

// will output something like +02:00 or -04:00
echo date('P');
Run Code Online (Sandbox Code Playgroud)

  • 考虑:`echo date("O");` (2认同)

Joh*_*kin 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);
Run Code Online (Sandbox Code Playgroud)

未经测试,但应该工作


Ken*_*nny 15

我对奥斯卡所做的略有修改.

date_default_timezone_set('America/New_York');
$utc_offset =  date('Z') / 3600;
Run Code Online (Sandbox Code Playgroud)

这给了我从时区EST到UTC的偏差,以小时为单位.

$ utc_offset的值为-4.


زيا*_*ياد 5

这是相同的 JavaScriptdate.getTimezoneOffset()函数:

<?php
echo date('Z')/-60;
?>
Run Code Online (Sandbox Code Playgroud)


HMa*_*gdy 5

只需执行以下操作即可:

//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
Run Code Online (Sandbox Code Playgroud)