TimeZone_Identifiers_Listは、利用可能なすべてのタイムゾーン識別子を取得するためのPHP組み込み関数です。その使用法は非常に簡単です:
<?php
$timezones = timezone_identifiers_list();
foreach ($timezones as $timezone) {
echo $timezone . PHP_EOL;
}
?>
このコードは、アジア/上海、ヨーロッパ/ロンドン、アメリカ/new_yorkなど、PHPでサポートされているすべてのタイムゾーン名を出力します。
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 。
上記の時間を中国の上海時間に変換したい場合は、 SetimeZoneメソッドを使用して実装できます。
<?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 、つまり、対応する北京時間になります。
時には、すべてのタイムゾーンのリストからユーザーに1つを選択してもらい、プログラムが選択に応じて時間を調整したい場合があります。サンプルコードは次のとおりです。
<?php
// すべてのタイムゾーンを取得します
$timezones = timezone_identifiers_list();
// ユーザーが選択したタイムゾーンがあると仮定します 'Europe/London'
$userSelectedTimezone = 'Europe/London';
// 最初に1つを作成します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 :: setimezoneメソッドを柔軟に組み合わせて、要件に応じて日付と時刻の時間を動的に変更できます。