谁能告诉我 DateTimeZone::getOffset PHP 函数是如何工作的?
Can someone tell me how the DateTimeZone::getOffset PHP function works?
我得到了这行代码:
echo (new DateTimeZone('UTC'))->getOffset(new DateTime('now', new DateTimeZone('America/New_York')));
它 return 为零。但我预计它 return UTC 和 America/New_York 时区之间的差异。
然后我两次提供相同的时区:
echo (new DateTimeZone('America/New_York'))->getOffset(new DateTime('now', new DateTimeZone('America/New_York')));
我预计它会 return 零,因为时区相同。但现在 returns -18000(这是 America/New_York 和 UTC 之间的偏移量)。
在 documentation 中,它表示 getOffset() 始终 return 是 GMT (=UTC) 的偏移量。但是为什么 getOffset 不是静态的呢?如果它总是相对于 GMT 的偏移量,为什么第一个构造函数中的时区起作用?
我知道 DateTime class 中还有一个 getOffset 方法,比较好用。但我想了解 getOffset 方法在 DateTimeZone class 中的工作原理。
时区的偏移量是它与 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 的当前时区。
我得到了这行代码:
echo (new DateTimeZone('UTC'))->getOffset(new DateTime('now', new DateTimeZone('America/New_York')));
它 return 为零。但我预计它 return UTC 和 America/New_York 时区之间的差异。
然后我两次提供相同的时区:
echo (new DateTimeZone('America/New_York'))->getOffset(new DateTime('now', new DateTimeZone('America/New_York')));
我预计它会 return 零,因为时区相同。但现在 returns -18000(这是 America/New_York 和 UTC 之间的偏移量)。
在 documentation 中,它表示 getOffset() 始终 return 是 GMT (=UTC) 的偏移量。但是为什么 getOffset 不是静态的呢?如果它总是相对于 GMT 的偏移量,为什么第一个构造函数中的时区起作用?
我知道 DateTime class 中还有一个 getOffset 方法,比较好用。但我想了解 getOffset 方法在 DateTimeZone class 中的工作原理。
时区的偏移量是它与 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 的当前时区。