Hallo, habe Eure kleine Diskussion via Google gefunden.
Als kleinen Dank für die Inspiration habe ich hier eine weitere Variante des Scripts für Euch.
Da man unter Wikipedia eine gute Referenz für die Mondereignisse hat (rückwirkend bis 2005 und in die Zukunft bis 2020), konnte ich anhand einiger Stichproben die Richtigkeit der Anzeige testen, und - zumindest bei den Stichproben - hat alles einwandfrei funktioniert.
Ich weiss nicht, wie weit man rückwärts gehen kann, bis sich Rundungsfehler einstellen, aber ich glaube für ein, zwei Leben reicht es.
Die Problematik bei den bisherigen hier war, dass einige Werte nicht anzeigen konnten, weil die führenden Nullen teilweise falsch angehängt werden.
Das habe ich ausgleichen können, statt ifThen habe ich switch case verwendet.
Die Rückgabe des $path ist jetzt der komplette Dateiname des Bildes.
Nochmals danke, die Basis konnte ich sehr gut für meine eigenen Zwecke gebrauchen.
Liebe Grüsse,
NICO
HIER DER CODE:
<?PHP
// TESTWERTE ODER ÜBERGABE DES ZIELDATUMS VIA $TAG, $MONAT, $JAHR
$tag = 15;
$monat = 5;
$jahr = 2009;
// CODE AUF BASIS DES BESTEHENDEN, INKL EDIT NICO
$akt_datum = mktime(0,0,00,$monat,$tag,$jahr);
$vollmond_datum = mktime(05, 01, 32, 5, 9, 2009); // Referenzzeitpunkt eines Vollmondereignisses, z.B. aus Wikipedia Mondphasentabelle
$zyklusdauer = (29 * 86400) + (12 * 3600) + (44 * 60) + 2.8; // Länge eines Mond-Zyklus (29 Tage, 12 Std, 44 Min, 2.8 Sek)
$mondzeit = ($akt_datum - $vollmond_datum) / $zyklusdauer;
$mondphase = (($mondzeit - (int)$mondzeit) * 100);
if($mondphase < 50)
{
$mond362 = ($mondphase + 50) * 3.62;
}
else
{
$mond362 = ($mondphase - 50) * 3.62;
}
$mond362 = (int) $mond362;
// zunächst negative Werte umkehren
if ($mond362 <0){
$mond362 = $mond362 *-1;
}
// Dann nach bedarf leere Stellen auffüllen mit 0
switch ($mond362)
{
case($mond362 < 100 && $mond362 >= 10):
$mond_pic = "mond0".$mond362;
break;
case($mond362 < 100 && $mond362 < 10):
$mond_pic = "mond00".$mond362;
break;
default:
$mond_pic = "mond".$mond362;
}
$path = $mond_pic;
?>
PS: @ThomasD:
Ich weiss nicht, ob das vorher eine Rolle gespielt hat, aber kann man in einer if then Schleife Zahlenwerte in Anführungszeichen vergleichen? Eventuell ist das ja auch ne Fehlerquelle. Ich hab sie mal rausgelassen, wie gesagt, im Test funktioniert das Skript jetzt einwandfrei.