[英]Interpreting the output of PHP's DateTimeZone::getOffset function
[英]Can someone tell me how the DateTimeZone::getOffset PHP function works?
我得到了這行代碼:
echo (new DateTimeZone('UTC'))->getOffset(new DateTime('now', new DateTimeZone('America/New_York')));
它返回零。 但我希望它返回UTC和America/New_York時區之間的差異。
然后我兩次提供相同的時區:
echo (new DateTimeZone('America/New_York'))->getOffset(new DateTime('now', new DateTimeZone('America/New_York')));
我預計它會返回零,因為時區相同。 但它現在返回 -18000(這是America/New_York和UTC之間的偏移量)。
在文檔中它說 getOffset() 總是返回 GMT (=UTC) 的偏移量。 但是為什么 getOffset 不是 static? 如果它始終是相對於 GMT 的偏移量,為什么第一個構造函數中的時區會起作用?
我知道DateTime class 中還有另一個getOffset方法,它更易於使用。 但我想了解DateTimeZone class 中的getOffset方法是如何工作的。
時區的偏移量是它與 UTC 相差多少小時。 時區的偏移可能會在一年中發生變化,具體取決於DST何時生效和失效。 所以你不能像那樣獲得時區的偏移量,因為它不是一個常數值。 您只能詢問時區在給定時間與 UTC 的偏移量。 這就是您將DateTime
對象傳遞給getOffset
目的:向時區詢問給定時間的偏移值是多少。 例如:
echo (new DateTimeZone('America/New_York'))->getOffset(new DateTime), PHP_EOL;
echo (new DateTimeZone('America/New_York'))->getOffset(new DateTime('+6 months'));
-18000
-14400
如果您想獲得兩個任意時區之間的偏移量差異,您可以獲取它們各自的 UTC 偏移量並減去它們。
我來到這里尋找一種方法來獲取 PHP 當前默認時區和 UTC 之間的偏移量。 我用DateTimeZone::getOffset
進入了兔子洞,但事實證明有一種更簡單的方法:
$offset = date('O');
// Returns a string like '-0400'
$offset = date('P');
// Returns a string like '-04:00'
$offset = date('Z');
// Returns the offset in seconds, e.g. '-14400'
需要明確的是,這得到了現在的時區偏移量,但我想這就是大多數時候所需要的。
您可以使用date_default_timezone_set()
切換 PHP 的當前時區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.