Monatsvorhersage gefixt

This commit is contained in:
Eskimue
2026-04-23 17:59:14 +02:00
parent 47eb2c492a
commit 9545c242cb
+39 -9
View File
@@ -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(