Sonnenauf-untergang

  • Für die Berechnung des Sonnen-auf und -untergangs gibt es allgemein Gültige Formeln. Die Richtigkeit wurde aber nicht überprüft. Da diese Formeln nur Näherungswerte ergeben, sind sie nicht als wirklich richtig anzusehen. Die Abweichung ist aber minimal.


    Die Formeln sind unter anderem auf der Seite
    http://lexikon.astroinfo.org/zeitgleichung/
    entsprechend erklärt.


    // WOZ - MOZ = -0.1752*sin(0.033430 * T + 0.5474) - 0.1340*sin(0.018234*T - 0.1939)
    // Deklination = 0.40954*sin(0.0172*(T-79.35))
    // Zeitdifferenz = 12*arccos((sin(h) - sin(B)*sin(Deklination)) / (cos(B)*cos(Deklination)))/pi;
    // Aufgang Ortszeit = 12 - Zeitdifferenz - Zeitgleichung
    // Untergang Ortszeit = 12 + Zeitdifferenz - Zeitgleichung

  • Für die Übersetzung ins php habe ich eine Funktion geschrieben, die je nach Operatoraufruf verschiedene Werte zurückliefert.



    Aufgerufen wird das script zB mit


    Es ist aber festzustellen, daß die Ergebnisse andere Werte bringen, wie die diversen Javascripte, die im Netz kuriseren. Eventuell liegt ein Rechenfehler im php-Ablauf vor, ich konnte den Fehler leider noch nicht entdecken.

    • Offizieller Beitrag

    Hallo Berny


    Ich denke mal einen "Fehler" gefunden zu haben. Du musst die Höhe in Bogenminuten umwandeln.

    Zitat

    Originalzitat :
    Sonnenaufgang h=-50 Bogenminuten = -0.0145


    Hier meine Version (habe ich für die Übersicht verwendet) - sie deckt sich exakt mit der Java Version


    [code:1]# Tag / Nacht Berechnung
    $geohoehe = -50;
    $geobreite = 47.867;
    $gelaenge = 14.117;
    $tagnummer = date("z");


    $geobreite = pi()*$geobreite/180;
    $geohoehe = deg2rad($geohoehe/60);
    $deklination = 0.40954*sin(0.0172*($tagnummer-79.35));
    $zeitdiff = 12*acos((sin($geohoehe) - sin($geobreite)*sin($deklination)) / (cos($geobreite)*cos($deklination)))/pi();
    $woz = 12 - $zeitdiff;
    $zeitgleichung =-0.1752*sin(0.033430 * $tagnummer + 0.5474) - 0.1340*sin(0.018234*$tagnummer - 0.1939);
    $sonnenaufg_woz = 12 - $zeitdiff - $zeitgleichung ;
    $sonnenuntg_woz = 12 + $zeitdiff - $zeitgleichung ;
    $sonnenaufg_abs = $sonnenaufg_woz - $gelaenge/15 +1+date("I");
    $sonnenuntg_abs = $sonnenuntg_woz - $gelaenge/15 +1+date("I");
    $zeitist = date("G")+(date("i")/60);
    if($zeitist>$sonnenaufg_abs and $zeitist<$sonnenuntg_abs){
    $nacht = 0;
    }
    else{
    $nacht = 1;
    }
    [/code:1]


    Schöne Grüße Othmar

  • Überarbeitet als function mit Möglichkeit der Angaben von Parametern:


    [code:1]function sunrise($op=1, $geohoehe=-0.0145, $geobreite=47.57518, $geolaenge=13.25426, $zzone=1, $time) {
    # Tag / Nacht Berechnung
    $geohoehe = -50;
    $geobreite = 47.57518;
    $gelaenge = 13.25426;
    $tagnummer = date("z", $time);


    $geobreite = pi()*$geobreite/180;
    $geohoehe = deg2rad($geohoehe/60);
    $deklination = 0.40954*sin(0.0172*($tagnummer-79.35));
    $zeitdiff = 12*acos((sin($geohoehe) - sin($geobreite)*sin($deklination)) / (cos($geobreite)*cos($deklination)))/pi();
    $woz = 12 - $zeitdiff;
    $zeitgleichung =-0.1752*sin(0.033430 * $tagnummer + 0.5474) - 0.1340*sin(0.018234*$tagnummer - 0.1939);
    $sonnenaufg_woz = 12 - $zeitdiff - $zeitgleichung ;
    $sonnenuntg_woz = 12 + $zeitdiff - $zeitgleichung ;
    $sonnenaufg_abs = $sonnenaufg_woz - $gelaenge/15 +1+date("I", $time);
    $sonnenuntg_abs = $sonnenuntg_woz - $gelaenge/15 +1+date("I", $time);
    // $zeitist = $time;
    $zeitist = date("G", $time)+(date("i", $time)/60);


    if($op == 1) {
    // Tag oder Nacht


    if($zeitist>$sonnenaufg_abs and $zeitist<$sonnenuntg_abs){
    $val[0] = 1;
    }
    else{
    $val[0] = 0;
    }
    } elseif($op == 2) {
    $val[0] = $sonnenaufg_abs;
    $val[1] = $sonnenuntg_abs;


    } else {
    $val[0] = 0;
    }



    return $val;
    }[/code:1]


    Functionsaufrufe:
    [code:1]
    if(!isset($op)) {
    $op = 2;
    }
    if(!isset($time)){
    $time = $wd_timestamp;
    }
    if(!isset($hoehe)){
    $hoehe = -0.0145;
    }
    if(!isset($Breite)){
    $Breite = 47.57518;
    }
    if(!isset($Laenge)){
    $Laenge = 13.25426;
    }
    $zzone = 1;
    $sunrise = sunrise(2, $hoehe, $Breite, $Laenge, $zzone, $time);
    echo "Sonnenaufgang: <b>";
    if($sunrise_h[0] < 10 ){
    echo "0";
    }
    echo $sunrise_h[0];
    echo ":";
    if($sunrise_m[0] < 10){
    echo "0";
    }
    echo $sunrise_m[0]." Uhr</b> ";


    echo "Sonnenuntergang: <b>";
    if($sundown_h[0] < 10 ){
    echo "0";
    }
    echo $sundown_h[0];
    echo ":";
    if($sundown_m[0] < 10){
    echo "0";
    }
    echo $sundown_m[0]." Uhr</b> ";[/code:1]


    Ebenso zur Feststellung, ob es Tag oder Nacht ist:


    [code:1]$tag_nacht = sunrise(1, $hoehe, $Breite, $Laenge, $zzone, $time);


    if($tag_nacht[0] == 1) {
    echo "Es ist Tag";
    } else {
    echo "Es ist Nacht";
    }
    [/code:1]


    Der Parameter $op ermöglicht es, in der Funktion noch weitere Abfragemöglichkeiten zu definieren.


    Die Parameter in Zahlen betreffen übrigens die Station Frankenmarkt, diese müssen entsprechend angepasst werden !