PHP Conference Japan 2024

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条笔记

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

例如。
<?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
*/

?>
-2
匿名
2年前
int偏移量不涵盖尼泊尔等“异常”位置的小数偏移量。
To Top