Durch mein Interesse für den Segelsport stolperte ich kürzlich über folgende Frage:
Gibt es eine Möglichkeit zukünftige Gezeiten (Tidenhub, Zeiten von Hochwasser und Niedrigwasser, Ebbe und Flut) für einen bestimmten Ort relativ einfach mittels PHP zu berechnen?
Das Bundesamt für Seeschifffahrt und Hydrographie (BSH) und einige andere kommerzielle Anbieter liefern solche Daten in Form von Gezeitentabellen. Das BSH schreibt auf seiner Internetseite, was für den Laien (in vereinfachter Form) zum Allgemeinwissen gehört, nämlich, dass die Gezeiten von den Himmelsgestirnen, im Wesentlichen von Sonne und Mond verursacht werden.
Das wiederum war Hinweis und Ausgangspunkt für das erste Script, dass ich in der neuen Rubrik „Codeschnipsel“ vorstellen möchte, nämlich ein Skript, dass die Mondphasen (genauer den Zeitpunkt des/der nächsten Vollmond/e) berechnet. Gerne kann es angepasst und auf der eigenen Internetseite verwendet werden. Support oder eine irgendwie geartete Garantie für Richtigkeit und Zuverlässigkeit gibt es (wie für alle kostenlose Scripte von zoerb.net) nicht. Wird das Script eingesetzt, freuen wir uns über einen Link zu unserer Internetseite. Los geht‘s:
PHP Vollmond berechnen | PHP Mondphasen Rechner
Vollmond ist einmal im Monat, dann müsste man den nächsten Vollmond doch leicht berechnen können, wenn man zu einem Referenzvollmond (empirisch beobachteter, bekannter Vollmond) 30 Tage addiert, oder?
Bei wikipedia lernt man, dass zwischen 2 Voll- oder Neumondern, der so genannte synodische Monat und daher nicht 30 sondern exakt 29.530589 Tage liegen. Exakt ist durchgestrichen, da es sich beim angegebenen Wert um einen Mittelwert handelt, der von diversen weiteren Faktoren abhängt. Für unser PHP-Script müssen wir uns aber wohl mit dieser Näherung zufrieden geben, jetzt aber zu PHP:
//Aktueller timestamp um zu erkennen ob eine Zeitdifferenz (z.B. MESZ, andere Zeitzone etc) berücksichtigt werden muss //Wenn sich Serverzeit von aktueller Benutzerzeit unterscheidet muss dies bei der Eingabe des Referenzmondes berücksichtigt werden $current_timestamp=time(); $current_date=date("d.m.Y - H:i",$current_timestamp); echo "Aktuelles Serverdatum und Uhrzeit: ".$current_date; echo " "; //Erzeugt einen timestamp für einen Referenz Vollmond //z. B. 14.05.14 20:14 $reference_moon = mktime(20,14,00,5,14,2014); //$reference_moon_format = date("d.m.Y - H:i",$reference_moon); //echo $reference_moon_format; //Zwischen 2 Vollmonden liegen 29.530589 Tage oder X tausend Sekunden $moon_days=29.530589; $moon_seconds=$moon_days*24*60*60; $next_moon=$reference_moon+$moon_seconds; $next_moon=round($next_moon, 0); echo " "; echo "Nächster Vollmond: "; echo date("d.m.Y - H:i",$next_moon); echo " "; echo "übernächster Vollmond: "; $next_moon=$next_moon+$moon_seconds; $next_moon=round($next_moon, 0); echo date("d.m.Y - H:i",$next_moon);
Das Script liefert als Ausgabe folgendes:
Aktuelles Serverdatum und Uhrzeit: 30.03.2023 – 14:21
Nächster Vollmond: 13.06.2014 – 08:58
übernächster Vollmond: 12.07.2014 – 21:42
Schlussbemerkung: Um auf die Gezeitenberechnung zurück zu kommen. Das BSH schreibt auch, dass ortabhängige Faktoren (Gestalt und Tiefe der Ozeane) ganz wesentlich zu den beobachteten Gezeiten beitragen. Die Gezeiten der Nordsee, sind demnach fast ausschließlich durch das Mitschwingen mit den angrenzenden Ozeanen und nur zu einem sehr geringen Teil durch die unmittelbare Einwirkung der gezeitenerzeugenden Gestirne verursacht. Die Gezeiten an irgendeiner bestimmten Stelle brauchen daher keineswegs dem Verlauf der örtlichen Schwerkraftstörungen zu ähneln. Da aber diese Störungen überall nur von den scheinbaren Stellungen der gezeitenerzeugenden Gestirne zur Erde abhängen, können die Gezeiten und Gezeitenströme an jedem Ort unmittelbar zu den scheinbaren Bewegungen des Mondes und der Sonne in Beziehung gesetzt werden. Die besondere Form dieser Beziehungen für einen bestimmten Ort wird bisher am genauesten und bequemsten aus örtlichen Beobachtungen der Gezeiten und Gezeitenströme, also aus der Erfahrung. Aber das ist als Aufhänger für das nächste Script gedacht…
Mit der Genauigkeit des oben aufgeführten Scripts sollte man es nicht zu genau nehmen:
Aufgrund der Tatsache, dass $moon_days nur ein Mittelwert ist, kommt es zu unvermeidbaren Fehlern. Genau aus diesem Grund macht auch die sekundengenaue Angabe $reference_moon = mktime(20,14,00,5,14,2014); nur bedingt Sinn. Auch die Angabe der Vollmond-Uhrzeit ist mit Vorsicht zu geniessen.
Der ermittelte „Vollmond-Tag“, sollte jedoch in den meisten Fällen zutreffen (sofern die angegebene Zeit nicht nahe Mitternacht liegt).
Die Genauigkeit ist ausserdem umso besser, je näher der „Referenzmond“ am aktuellen Datum liegt, sprich: die Angabe des nächsten Vollmondes sollte exakter stimmen, als die des Übernächsten…
Pingback: PHP Gezeiten berechnen Ebbe und Flut per Script berechnen
Pingback: PHP Gezeiten berechnen, Ebbe und Flut per Script