多くのアプリケーションシナリオでは、さまざまな都市での夕日を理解することは一般的な要件です。 PHPは、指定された場所で日没時間を計算できるdate_sunset()関数を提供します。 DateTimeZoneクラスと組み合わせることで、複数の都市で日没時間の比較を簡単に達成できます。この記事では、サンプルコードを使用して、 date_sunset()を使用する方法を紹介して、 datetimezoneでこの関数を実装します。
date_sunset()関数は、指定された場所の日没時間を取得するために、PHPに組み込まれた非常に便利な日付と時刻関数です。その基本的な構文は次のとおりです。
date_sunset(int $timestamp, int $format = SUNFUNCS_RET_STRING, float $latitude = 0, float $longitude = 0, float $zenith = 90.83, float $gmt_offset = 0)
$タイムスタンプ:指定されたタイムスタンプ。
$ Format : Sunfuncs_ret_string 、 sunfuncs_ret_timestamp 、 sunfuncs_ret_doubleなどの形式を返します。
$緯度と$経度:場所の緯度と経度を指定します。
$ゼニス:太陽の天文学的な位置、デフォルトは90.83(つまり、天文学的な夕日ポイント)になります。
$ gmt_offset :タイムゾーンのオフセット。
地域全体でより正確な日没時間を取得するために、PHPのDateTimeZoneクラスを使用して、さまざまなタイムゾーンを指定できます。 date_sunset()関数を使用してタイムゾーンを使用することにより、正確な日没時間を計算できます。
次のPHPコードの例は、Date_sunset()をDateTimeZoneクラスで使用する方法を示しており、さまざまな都市のサンセットタイムを比較しています。この例では、比較のためにニューヨーク、ロンドン、北京の3つの都市を選択しました。
<?php
// 都市とタイムゾーンの緯度と経度を定義する
$locations = [
'New York' => [
'latitude' => 40.7128,
'longitude' => -74.0060,
'timezone' => 'America/New_York'
],
'London' => [
'latitude' => 51.5074,
'longitude' => -0.1278,
'timezone' => 'Europe/London'
],
'Beijing' => [
'latitude' => 39.9042,
'longitude' => 116.4074,
'timezone' => 'Asia/Shanghai'
]
];
// 現在のタイムスタンプ
$timestamp = time();
// 各都市で日没時間を輸出します
foreach ($locations as $city => $info) {
// タイムゾーンオブジェクトを取得します
$timezone = new DateTimeZone($info['timezone']);
// 街の夕日を計算します
$sunset = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $info['latitude'], $info['longitude']);
// 作成する DateTime オブジェクトと設定タイムゾーン
$sunset_time = new DateTime("@$sunset");
$sunset_time->setTimezone($timezone);
// フォーマット出力日没時間
echo "The sunset time in $city is: " . $sunset_time->format('Y-m-d H:i:s') . " (" . $info['timezone'] . ")\n";
}
?>
緯度と経度とタイムゾーンの3つの都市を定義します。 DateTimeZoneクラスを使用して、各都市のタイムゾーンオブジェクトを取得し、計算された日没時間が現地時間に基づいていることを確認します。
date_sunset()関数を使用して、各都市の日没時間を計算します。この関数は、結果をUNIXタイムスタンプ形式で返します。
DateTimeオブジェクトを作成し、 SettimeZone()メソッドを使用して正しいタイムゾーンを設定し、 YMD H:I:Sの日付時間形式に出力をフォーマットします。
現在の時間が2025年4月26日にUTC 12:00:00であると仮定すると、プログラムは次のようなものを出力します。
The sunset time in New York is: 2025-04-26 19:50:00 (America/New_York)
The sunset time in London is: 2025-04-26 20:10:00 (Europe/London)
The sunset time in Beijing is: 2025-04-26 19:30:00 (Asia/Shanghai)
このようにして、さまざまな都市のサンセットタイムを簡単に比較でき、出力形式は柔軟で正確です。