PHPでは、 date_sunset()は、日付と地理的位置に基づいて日没時間を計算するための非常に実用的な機能です。ただし、 Date_Sunset()を使用するだけで、日没時間のみを返すなど、限られた情報しか取得できません。より包括的な日差し情報(日の出、日没、日曜日の正午、日差しの期間など)を取得するために、カスタム関数sun_info()をカプセル化して、 date_sun_info()とdate_sunset()の機能を統合して、豊富な太陽関連データを出力します。
以下に、 sun_info()関数を実装し、 date_sunset()を組み合わせて詳細なサンシャイン情報を取得および出力する方法を示します。
まず、2つの重要な関数の使用を簡単に紹介します。
date_sunset() :指定された時間と地理的位置の日没時間を取得します。
date_sun_info() :日の出、日没、夕暮れ、夜明け、日曜日などの詳細情報を含む配列を返します。
date_sun_info()にはより包括的な機能がありますが、 date_sunset() (異なるゼニス角など)の構成可能性を使用して、より粒状データを取得できます。
sun_info()関数を書き込みます。これは、日付、経度、緯度、タイムゾーンをパラメーターとして取り、次の情報を含む構造化された配列を返します。
日の出の時間
日没の時間
サンシャインの長さ(ユニット:分)
太陽は正午です
夕暮れ時
夜明けの時間
function sun_info($date, $latitude, $longitude, $timezone = 'UTC') {
$timestamp = strtotime($date);
$sunData = date_sun_info($timestamp, $latitude, $longitude);
$sunset = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude);
$sunrise = date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude);
$daylightMinutes = round(($sunset - $sunrise) / 60);
// 指定されたタイムゾーンフォーマット出力に変換します
$dtZone = new DateTimeZone($timezone);
$format = function($ts) use ($dtZone) {
if (!$ts || $ts < 0) return 'N/A';
$dt = new DateTime("@$ts");
$dt->setTimezone($dtZone);
return $dt->format('H:i:s');
};
return [
'sunrise' => $format($sunData['sunrise']),
'sunset' => $format($sunData['sunset']),
'solar_noon' => $format($sunData['solar_noon']),
'civil_dawn' => $format($sunData['civil_twilight_begin']),
'civil_dusk' => $format($sunData['civil_twilight_end']),
'day_length' => $daylightMinutes . ' 分',
];
}
2025年4月26日に北京からrizhao情報を取得したいとしたら、次のように呼ぶことができます。
$info = sun_info('2025-04-26', 39.9042, 116.4074, 'Asia/Shanghai');
echo "北京の今日の太陽の情報:<br>";
foreach ($info as $label => $value) {
echo ucfirst(str_replace('_', ' ', $label)) . ': ' . $value . '<br>';
}
出力の例は次のとおりです。
Beijing 今日の太陽の情報:
Sunrise: 05:21:32
Sunset: 18:57:20
Solar noon: 12:09:26
Civil dawn: 04:53:10
Civil dusk: 19:25:42
Day length: 456 分
これらの日差し情報をより直感的に表示するために、JavaScriptまたはチャートライブラリを組み合わせることで、出力効果をさらに美化できます。たとえば、ページにリンクを統合することもできます。
echo '<a href="https://m66.net/sun?lat=39.9&lon=116.4&date=2025-04-26">Rizhaoの詳細をご覧ください</a>';