获取时区列表
$timezones = DateTimeZone::listIdentifiers();
此代码将返回一个包含所有已知时区标识符的数组。
创建 DateTimeZone 对象
要创建 DateTimeZone 对象,可以使用 DateTimeZone::createFromName()
方法:
$timezone = DateTimeZone::createFromName("America/Los_Angeles");
设置时区
要设置 DateTime 对象的时区,使用 setTimezone()
方法:
$datetime->setTimezone($timezone);
格式化日期和时间
可以使用 format()
方法以特定时区的格式格式化日期和时间:
$formattedDate = $datetime->format("Y-m-d H:i:s"); // 美国洛杉矶时间
时区转换
PHP 提供了多种方法来转换时区,包括:
DateTime::modify()
:修改 DateTime 对象中的日期或时间,同时调整时区。DateTime::setTimezone()
:更改 DateTime 对象的时区。DateTimeImmutable::setTimezone()
:与setTimezone()
类似,但创建不可变的 DateTimeImmutable 对象。
时差计算
可以使用 DateTime::getOffset()
方法计算两个时区之间的时差:
$offset = $timezone1->getOffset($timezone2); // 以秒为单位的时差
实用示例
- 显示当前时间在不同时区的格式:
use DateTimeZone;
// 获取当前时间
$now = new DateTime();
// 创建不同的时区对象
$timezones = array("America/Los_Angeles", "Europe/London", "Asia/Tokyo");
// 循环时区并显示格式化的当前时间
foreach ($timezones as $timezone) {
$tz = new DateTimeZone($timezone);
$now->setTimezone($tz);
echo $now->format("Y-m-d H:i:s") . " " . $tz->getName() . "
";
}
- 将 UTC 时间转换为特定时区:
use DateTimeZone;
// 创建 UTC 时间的 DateTime 对象
$utcTime = new DateTime("2023-03-08 12:00:00");
// 创建目标时区对象
$targetTimezone = new DateTimeZone("Asia/Tokyo");
// 将 UTC 时间转换为目标时区
$localTime = $utcTime->setTimezone($targetTimezone);
// 输出本地时间
echo $localTime->format("Y-m-d H:i:s") . " " . $targetTimezone->getName() . "
";
- 计算两个时区之间的时差:
use DateTimeZone;
// 创建两个时区对象
$timezone1 = new DateTimeZone("America/Los_Angeles");
$timezone2 = new DateTimeZone("Asia/Tokyo");
// 计算时差(以小时为单位)
$offset = $timezone1->getOffset($timezone2) / 3600;
// 输出时差
echo "时差:{$offset} 小时
";