簡體   English   中英

PHP 中的 UTC 偏移量

[英]UTC Offset in PHP

相對於當前(系統)時區,獲取 PHP 中的 UTC 偏移量的最簡單方法是什么?

  date('Z');

以秒為單位返回 UTC 偏移量。

// will output something like +02:00 or -04:00
echo date('P');

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

未經測試,但應該工作

我對奧斯卡所做的做了一個稍微修改的版本。

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

這給了我從我的時區 EST 到 UTC 的以小時為單位的偏移量。

$utc_offset 的值為 -4。

這是相同的 JavaScript date.getTimezoneOffset()函數:

<?php
echo date('Z')/-60;
?>

你可以這樣做:

//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

這將 output 格式化為: +0200-0400

echo date('O');

這可能對正確的RSS RFC822 格式有用

<pubDate>Sat, 07 Sep 2002 00:00:01 -0500</pubDate>

GMT 偏移量(像這樣)不應使用冒號( +02:00 from date('P'); )。

而且,盡管 RSS RFC833 可以接受,但我們不希望 output 像PDTCST ,因為這些是任意的,“CST”可能意味着很多事情:

date("Z")將返回相對於服務器時區而不是用戶機器時區的 UTC 偏移量。 要獲取用戶的機器時區,您可以使用 javascript getTimezoneOffset()函數返回 UTC 時間和本地時間之間的時差,以分鍾為單位。

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

在保存您的 php 代碼的page.php中,您可以使用該偏移值做任何您想做的事情。 或者,您可以根據需要通過 Ajax 將偏移值發送到您的 php 腳本,而不是重定向到另一個頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM