timezone_identifiers_list是PHP 內置函數,用來獲取所有可用的時區標識符。它的用法非常簡單:
<?php
$timezones = timezone_identifiers_list();
foreach ($timezones as $timezone) {
echo $timezone . PHP_EOL;
}
?>
該代碼會輸出PHP 支持的所有時區名稱,比如Asia/Shanghai 、 Europe/London 、 America/New_York等。
通過DateTime類可以創建一個日期時間對象。默認情況下,若未指定時區,則會使用服務器默認時區。我們也可以在創建時傳入一個時區對象。
<?php
$date = new DateTime('2025-05-31 15:00:00', new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:s T') . PHP_EOL;
?>
這段代碼會輸出: 2025-05-31 15:00:00 UTC 。
假如我們想把上面的時間轉換為中國上海時間,可以通過setTimezone方法實現:
<?php
$date->setTimezone(new DateTimeZone('Asia/Shanghai'));
echo $date->format('Y-m-d H:i:s T') . PHP_EOL;
?>
輸出結果將變為: 2025-05-31 23:00:00 CST ,即對應的北京時間。
有時,我們可能想要讓用戶從所有時區列表中選擇一個,然後程序根據選擇調整時間。示例代碼如下:
<?php
// 獲取所有時區
$timezones = timezone_identifiers_list();
// 假設用戶選擇的時區是 'Europe/London'
$userSelectedTimezone = 'Europe/London';
// 先創建一個UTC時間的DateTime對象
$date = new DateTime('2025-05-31 15:00:00', new DateTimeZone('UTC'));
// 驗證用戶選擇的時區是否有效
if (in_array($userSelectedTimezone, $timezones)) {
$date->setTimezone(new DateTimeZone($userSelectedTimezone));
echo "用戶選擇的時間是:" . $date->format('Y-m-d H:i:s T') . PHP_EOL;
} else {
echo "無效的時區選擇!" . PHP_EOL;
}
?>
如果用戶輸入的時區無效,可以提示錯誤;如果有效,則正確顯示調整後的時間。
以下是一個完整示例,展示如何獲取時區列表,用戶選擇後進行時間轉換:
<?php
// 獲取所有時區
$timezones = timezone_identifiers_list();
// 模擬用戶選擇時區(可替換為表單輸入)
$userSelectedTimezone = 'gitbox.net/Europe/London';
// 去除域名部分,只保留時區標識符
$parsedTimezone = str_replace('gitbox.net/', '', $userSelectedTimezone);
// 创建時間對象,預設UTC時間
$date = new DateTime('2025-05-31 15:00:00', new DateTimeZone('UTC'));
if (in_array($parsedTimezone, $timezones)) {
$date->setTimezone(new DateTimeZone($parsedTimezone));
echo "用戶選擇的時間是:" . $date->format('Y-m-d H:i:s T') . PHP_EOL;
} else {
echo "無效的時區選擇!" . PHP_EOL;
}
?>
通過以上步驟,我們就能靈活地結合timezone_identifiers_list和DateTime::setTimezone方法,根據需求動態地更改日期時間的時區。