49

現在の(システム)タイムゾーンを基準にして、PHPでUTCオフセットを取得する最も簡単な方法は何ですか?

4

7 に答える 7

92
  date('Z');

UTC オフセットを秒単位で返します。

于 2008-10-11T01:06:27.680 に答える
22

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

テストされていませんが、動作するはずです

于 2008-10-11T01:06:20.673 に答える
19

Oscar が行ったことを少し修正したバージョンを作成しました。

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

これにより、タイムゾーン EST から UTC までのオフセットが時間単位でわかりました。

$utc_offset の値は -4 でした。

于 2015-06-09T15:08:09.687 に答える
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
于 2018-03-23T17:31:57.570 に答える
-3

date("Z")ユーザーのマシンのタイムゾーンではなく、サーバーのタイムゾーンに相対的な UTC オフセットを返します。getTimezoneOffset()ユーザーのマシンのタイムゾーンを取得するには、UTC 時間と現地時間の時差を分単位で返すJavaScript 関数を使用できます。

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

そして、page.phpあなたのphpコードを保持する中に、そのオフセット値を使って好きなことをすることができます. または、別のページにリダイレクトする代わりに、必要に応じて Ajax を介してオフセット値を PHP スクリプトに送信できます。

于 2013-01-05T15:55:42.893 に答える