CakeFest 2024: The Official CakePHP Conference

date_sun_info

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

date_sun_infoGüneşin doğuşu/batışı ve alacakaranlık başlangıcı/sonu hakkında bilgi içeren bir dizi döndürür

Açıklama

date_sun_info(int $zaman_damgası, float $enlem, float $boylam): array

Bağımsız Değişkenler

zaman_damgası

Zaman damgası.

enlem

Enlem derecesi.

boylam

Boylam derecesi.

Dönen Değerler

Başarılı olduğunda diziyi, başarısız olduğunda false değerini döndürür. Dönen dizinin yapısı:

sunrise
Güneşin doğuşunun zaman damgası (başucu açısı = 90° 35').
sunset
Güneşin batışının zaman damgası (başucu açısı = 90° 35').
transit
Güneşin başucunda olduğu, yani en üst noktasına ulaştığı zamanın damgası.
civil_twilight_begin
Sivil şafağın başlangıcı (başucu açısı = 96°). Gün doğumunda (sunrise) biter.
civil_twilight_end
Sivil alacakaranlığın sonu (başucu açısı = 96°). Gün batımında (sunset) başlar.
nautical_twilight_begin
Denizde şafağın başlangıcı (başucu açısı = 102°). Şafağın başlangıcında (civil_twilight_begin) biter.
nautical_twilight_end
Deniz alacakaranlığının sonu (başucu açısı = 102°). civil_twilight_end'de başlar.
astronomical_twilight_begin
Astronomik şafağın başlangıcı (başucu açısı = 108°). nautical_twilight_begin'de biter.
astronomical_twilight_end
Astronomik alacakaranlığın sonu (başucu açısı = 108°). nautical_twilight_end'de başlar.

Dizi elemanlarının değerleri, ya UNIX zaman damgasıdır, ya da güneş günün tamamında ilgili başucunun altındaysa false, güneş günün tamamında ilgili başucunun üstündeyse true'dur.

Sürüm Bilgisi

Sürüm: Açıklama
7.2.0 Hesaplama, yerel öğle yerine yerel gece yarısı olarak düzeltildi, bu da sonuçları biraz değiştirdi.

Örnekler

Örnek 1 - date_sun_info() örneği

<?php
$sun_info
= date_sun_info(strtotime("2008-12-12"), 36.55, 32.03);
foreach (
$sun_info as $key => $val) {
echo
"$key: " . date("H:i:s", $val) . "\n";
}
?>

Yukarıdaki örneğin çıktısı:

sunrise: 06:54:58
sunset: 16:36:54
transit: 11:45:56
civil_twilight_begin: 06:26:20
civil_twilight_end: 17:05:32
nautical_twilight_begin: 05:54:03
nautical_twilight_end: 17:37:49
astronomical_twilight_begin: 05:22:39
astronomical_twilight_end: 18:09:14

Örnek 2 - Biraz işlemle Kutup gecesi

<?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";
}
?>

Yukarıdaki örneğin çıktısı:

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

Örnek 3 - Gece yarısı güneşi (Tromsø, Norveç)

<?php
$si
= date_sun_info(strtotime("2022-06-26"), 69.68, 18.94);
print_r($si);
?>

Yukarıdaki örneğin çıktısı:

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
)

Örnek 4 - Gün uzunluğunun hesaplanması (Alanya)

<?php
$si
= date_sun_info(strtotime('2022-06-21'), 36.5, 32);
$diff = $si['sunset'] - $si['sunrise'];
echo
"Length of day: ",
floor($diff / 3600), "h ",
floor(($diff % 3600) / 60), "s\n";
?>

Yukarıdaki örneğin çıktısı:

Length of day: 14h 42s

add a note

User Contributed Notes 1 note

up
7
TheFax
1 year ago
In the last example, conversion from seconds to Hour, Minutes, Seconds is wrong.
This is the correct verion:

<?php
$si
= date_sun_info(strtotime('2022-08-26'), 50.45, 30.52);
$diff = $si['sunset'] - $si['sunrise']; # $diff is measured in seconds.
echo "Length of day: ",
floor($diff / 3600), "h",
floor(($diff % 3600) / 60), "m",
floor($diff % 60), "s\n";
?>

Output:
Length of day: 13h53m15s
To Top