DateTimeZone::getOffset

timezone_offset_get

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DateTimeZone::getOffset -- timezone_offset_get返回时区相对于 GMT 的偏移量

描述

面向对象风格

public DateTimeZone::getOffset(DateTimeInterface $datetime): int

过程式风格

此函数返回 datetime 参数中指定的日期/时间相对于 GMT 的偏移量。GMT 偏移量是使用正在使用的 DateTimeZone 对象中包含的时区信息计算的。

参数

object

仅限过程式风格:由 timezone_open() 返回的 DateTimeZone 对象

datetime

包含要计算偏移量的日期/时间的 DateTime。

返回值

返回时区偏移量,以秒为单位。

示例

示例 #1 DateTimeZone::getOffset() 示例

<?php
// 创建两个时区对象,一个用于台北(台湾),另一个用于
// 东京(日本)
$dateTimeZoneTaipei = new DateTimeZone("Asia/Taipei");
$dateTimeZoneJapan = new DateTimeZone("Asia/Tokyo");

// 创建两个 DateTime 对象,它们将包含相同的 Unix 时间戳,但
// 它们附加了不同的时区。
$dateTimeTaipei = new DateTime("now", $dateTimeZoneTaipei);
$dateTimeJapan = new DateTime("now", $dateTimeZoneJapan);

// 计算 $dateTimeTaipei 对象中包含的日期/时间的 GMT 偏移量,
// 但使用为东京定义的时区规则
// ($dateTimeZoneJapan)。
$timeOffset = $dateTimeZoneJapan->getOffset($dateTimeTaipei);

// 应该显示 int(32400)(对于 1951 年 9 月 8 日星期六 01:00:00 JST 之后日期)。
var_dump($timeOffset);
?>

添加备注

用户贡献的备注 2 个备注

Daniel Vidal
1 年前
请注意,DateTime 参数对 DateTimeZone::getOffset($DateTime) 返回的结果没有影响,除非它引用的是一个 DateTime,该 DateTime 在引用的 DateTimeZone 中存在夏令时。

例如。
<?php
$timezone_brl
= new DateTimeZone('America/Sao_Paulo');
$timezone_eng = new DateTimeZone('Europe/London');
$timezone_aus = new DateTimeZone('Australia/Brisbane');

$dateTimes = [
new
DateTime()
, new
DateTime('now', $timezone_eng)
, new
DateTime('now', $timezone_aus)
, new
DateTime('now', $timezone_brl)
, new
DateTime('2000-06-10', $timezone_brl)
, new
DateTime('2000-12-10', $timezone_brl)
, new
DateTime('2020-12-10', $timezone_brl)
];

foreach(
$dateTimes as $dateTime)
{
echo
"\n" . $timezone_brl->getOffset($dateTime);
}
/**
* -10800
* -10800
* -10800
* -10800
* -10800 // 2000 年 6 月没有夏令时
* - 7200 // 巴西在 2020 年之前有夏令时
* -10800 // 没有夏令时,所以它返回 -10800
*/

?>
匿名
1 年前
int 偏移量不涵盖“不规则”位置(如尼泊尔等)的小数偏移量。
To Top