(PHP 5 >= 5.1.2, PHP 7, PHP 8)
date_sun_info — 日の出/日の入り時刻と薄明 (twilight) の開始/終了時刻の情報を含む配列を返す
timestampUnix タイムスタンプ。
latitude度単位の緯度。
longitude度単位の経度。
配列を返します。配列の構造の詳細は、以下のリストのとおりです:
sunrisesunsettransitcivil_twilight_beginsunrise の時刻に終了します。
civil_twilight_endsunset の時刻に始まります。
nautical_twilight_begincivil_twilight_begin の時刻に終了します。
nautical_twilight_endcivil_twilight_end の時刻に始まります。
astronomical_twilight_beginnautical_twilight_begin の時刻に終了します。
astronomical_twilight_endnautical_twilight_end の時刻に始まります。
配列の要素の値は、Unix タイムスタンプ、
太陽がそれぞれの天頂角より一日中下にある場合の false、
一日中上にある場合の true のいずれかです。
| バージョン | 説明 |
|---|---|
| 7.2.0 | 計算が、現地の正午ではなく、 現地の真夜中を基準に行われるように修正されました。 これによって、結果が少し変わります。 |
例1 date_sun_info() の例
<?php
date_default_timezone_set('Asia/Jerusalem');
$sun_info = date_sun_info(strtotime("2006-12-12"), 31.7667, 35.2333);
foreach ($sun_info as $key => $val) {
echo "$key: " . date("H:i:s", $val) . "\n";
}上の例の出力は以下となります。
sunrise: 06:29:21 sunset: 16:36:00 transit: 11:32:41 civil_twilight_begin: 06:02:36 civil_twilight_end: 17:02:45 nautical_twilight_begin: 05:32:14 nautical_twilight_end: 17:33:08 astronomical_twilight_begin: 05:02:31 astronomical_twilight_end: 18:02:51
例2 極夜のデータに処理を少し行う例
<?php
$tz = new \DateTimeZone('America/Anchorage');
$si = date_sun_info(strtotime("2022-12-21"), 70.21, -148.51);
foreach ($si as $key => $value) {
echo
match ($value) {
true => 'always',
false => 'never',
default => date_create("@{$value}")->setTimeZone($tz)->format( 'H:i:s T' ),
},
": {$key}",
"\n";
}上の例の出力は以下となります。
never: sunrise never: sunset 12:52:18 AKST: transit 10:53:19 AKST: civil_twilight_begin 14:51:17 AKST: civil_twilight_end 09:01:47 AKST: nautical_twilight_begin 16:42:48 AKST: nautical_twilight_end 07:40:47 AKST: astronomical_twilight_begin 18:03:49 AKST: astronomical_twilight_end
例3 白夜の例 (Tromsø, Norway)
<?php
$si = date_sun_info(strtotime("2022-06-26"), 69.68, 18.94);
print_r($si);上の例の出力は以下となります。
Array
(
[sunrise] => 1
[sunset] => 1
[transit] => 1656240426
[civil_twilight_begin] => 1
[civil_twilight_end] => 1
[nautical_twilight_begin] => 1
[nautical_twilight_end] => 1
[astronomical_twilight_begin] => 1
[astronomical_twilight_end] => 1
)
例4 一日の長さを計算する例 (Kyiv)
<?php
$si = date_sun_info(strtotime('2022-08-26'), 50.45, 30.52);
$diff = $si['sunset'] - $si['sunrise'];
echo "Length of day: ",
floor($diff / 3600), "h ",
floor(($diff % 3600) / 60), "m\n";上の例の出力は以下となります。
Length of day: 13h 53m