[英]UTC Offset in PHP
相對於當前(系統)時區,獲取 PHP 中的 UTC 偏移量的最簡單方法是什么?
date('Z');
以秒為單位返回 UTC 偏移量。
// will output something like +02:00 or -04:00
echo date('P');
$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 像PDT
和CST
,因為這些是任意的,“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.