wer’s braucht. Ich habe es mal für eine 24h laufende LED-Wand benötigt, die ihre Helligkeit dynamisch anpassen sollte. Sonnenaufgang, goldene und blaue Stunde etc pp.. Die Werte sind ausreichend genau über die Formeln abgebildet.
Eingabewerte sind Längen- und Breitengrad.
<?php
// Example Berlin/germany
$geogr_L=-13.25;
$geogr_B=52.5;
// n paar Variablen
$yearday=date('z');
$dateYear=date("Y");
$pi=3.1415926535;
// Annahme, dass die Sonne untergegangen ist, wenn sie 5/6° unterm Horiz ist
$h=-5/6*$pi/180;
// siehe wiki Dämmerung
// -6° bürgerliche Dämmerung (lesen im Freien möglich)
// -12° nautische Dämmerung (schon einige Sterne sichtbar)
// -18° astronomische Dämmerung (tiefste Nacht)
// schaltjahr bzw. sommerzeit
function dst_start($year) {
return mktime(2,0,0,3,31-date('w', mktime(2,0,0,3,31,$year)),$year);
}
function dst_end($year) {
return mktime(2,0,0,10,31-date('w', mktime(2,0,0,10,31,$year)),$year);
}
if($dateNow>dst_start($dateYear)&&$dateNow>dst_end($dateYear))
{ $isDEST = 2;}
else
{ $isDEST = 1;}
$diffTime = 1+$isDEST;
// -- hier passiert das wunder :)
// --
$b=$geogr_B*$pi/180;
$wozmoz=-0.171*sin(0.0337*$yearday+0.465)-0.1299*sin(0.01787*$yearday-0.168);
$dekli=0.4095*sin(0.016906*($yearday-80.086));
// --
// der Winkel steht im ersten sinus, hier also $h
// für $h kann auch -2 für die goldene Stunde oder
// -6 für die blaue Stunde verwendet werden
$tdiff_s=12*acos((sin($h)-sin($b)*sin($dekli))/(cos($b)*cos($dekli)))/$pi;
// tdiff ist (da die sonnenbewegung symmetrisch ist) die Abweichung von Mittags, 12 Uhr.
$s_auf=(12-$tdiff_s)+$geogr_L/15-$wozmoz+$diffTime; // (Einheit Stunden, Fließkomma)
$s_unt=(12+$tdiff_s)+$geogr_L/15+$wozmoz+$diffTime;
echo "tdiff_s : ".$tdiff_s."<br/><br/>";
// funktion, um Stunden/Fließkomma in Zeit umzurechnen
function dez2time($tdez){
$tstd=floor($tdez);
$tmin=floor(60*($tdez-$tstd));
return str_pad($tstd,2,'0',STR_PAD_LEFT).":".str_pad($tmin, 2 ,'0', STR_PAD_LEFT);
}
// ausgabe
echo "Sonnenaufgang : ".dez2time($sauf)." Uhr<br/>";
echo "Sonnenuntergang : ".dez2time($sunt)." Uhr<br/>";
?>
Damit sollte es ein Einfaches sein, sich noch eine Kurve zu bauen, die um die errechneten Zeiten herum Werte wie LED-Helligkeit oder ISO/Verschlusszeit/Blende zu ändern. viel Spaß.