From 9545c242cb431c9b59fb14296165e651a68104da Mon Sep 17 00:00:00 2001 From: Eskimue Date: Thu, 23 Apr 2026 17:59:14 +0200 Subject: [PATCH] Monatsvorhersage gefixt --- public/monatsvorhersage.php | 48 ++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/public/monatsvorhersage.php b/public/monatsvorhersage.php index 6010065..4a2410f 100644 --- a/public/monatsvorhersage.php +++ b/public/monatsvorhersage.php @@ -800,17 +800,47 @@ if (!function_exists('monthForecastBuildNarrativeText')) { $moonEvents = $findEvents( $filteredEvents, - static fn (array $event): bool => in_array((string) ($event['type'] ?? ''), ['moon_phase', 'golden_handle', 'moon_planet_approach', 'moon_deep_sky_approach', 'moon_occultation', 'moon_apsis'], true), - 4 + static fn (array $event): bool => in_array((string) ($event['type'] ?? ''), ['moon_phase', 'golden_handle', 'moon_planet', 'moon_planet_approach', 'moon_deep_sky', 'moon_deep_sky_approach', 'moon_occultation', 'moon_apsis'], true), + 10 ); if ($moonEvents !== []) { - $moonIntro = $pickRandomText([ - 'Auch der Mond liefert im Laufe des Monats einige markante Beobachtungsmomente.', - 'Der Mond zeigt im Monatsverlauf mehrere gut beobachtbare Phasen und Konstellationen.', - 'Am Mond ergeben sich im Laufe des Monats einige auffällige Termine und Begegnungen.', - 'Der Mond bietet im Monatsverlauf mehrere charakteristische Beobachtungssituationen.', - ], 'Auch der Mond liefert im Laufe des Monats einige markante Beobachtungsmomente.'); - $paragraphs[] = $moonIntro . ' Besonders auffällig sind ' . $describeEvents($moonEvents) . '.'; + // Chronologisch sortieren nach local_iso + $sortedMoonEvents = $moonEvents; + usort($sortedMoonEvents, static fn (array $a, array $b): int => strcmp( + (string) ($a['local_iso'] ?? $a['date'] ?? ''), + (string) ($b['local_iso'] ?? $b['date'] ?? '') + )); + + // Natürlichsprachliche Liste: "Vollmond ist am 01.05., Apogäum am 05.05. und Neumond am 16.05." + $moonParts = []; + foreach ($sortedMoonEvents as $me) { + $label = trim((string) ($me['event'] ?? '')); + $date = trim((string) ($me['date'] ?? '')); + if ($label === '' || $date === '') { + continue; + } + // "Mond bedeckt X" → "der Mond bedeckt X" für natürlicheren Satzbau + if (str_starts_with($label, 'Mond bedeckt ')) { + $label = 'der ' . $label; + } + $moonParts[] = ['label' => $label, 'date' => $date]; + } + + if ($moonParts !== []) { + $moonSentenceParts = []; + foreach ($moonParts as $idx => $part) { + if ($idx === 0) { + $moonSentenceParts[] = $part['label'] . ' ist am ' . $part['date']; + } else { + $moonSentenceParts[] = $part['label'] . ' am ' . $part['date']; + } + } + $lastPart = array_pop($moonSentenceParts); + $moonSentence = $moonSentenceParts !== [] + ? implode(', ', $moonSentenceParts) . ' und ' . $lastPart + : $lastPart; + $paragraphs[] = $moonSentence . '.'; + } } $planetObservationEvents = $findEvents(