簡體   English   中英

有人能告訴我 DateTimeZone::getOffset PHP 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')));

它返回零。 但我希望它返回UTCAmerica/New_York時區之間的差異。

然后我兩次提供相同的時區:

echo (new DateTimeZone('America/New_York'))->getOffset(new DateTime('now', new DateTimeZone('America/New_York')));

我預計它會返回零,因為時區相同。 但它現在返回 -18000(這是America/New_YorkUTC之間的偏移量)。

文檔中它說 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 的當前時區。

參見https://www.php.net/manual/en/datetime.format.php

暫無
暫無

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

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