dynamische Terminberechnung durch die „Osterformel“

Für unsere Contents gibt es nun eine dynamische Terminberechnung. Nur wenige grün markierte Termine wie Ostern und Advent müssen eingetragen sein, davon leiten sich alle anderen ab. Ostern wird über die „Osterformel“ sogar schon automatisch errechnet. Dadurch sinkt der Verwaltungsaufwand deutlich und frische Contents durch unseren Grafikservice sind noch leichter einmal erstellbar. Hier ein aktueller Einblick, wie wir intern die Termine errechnen. Einfach die Jahreszahl ändern schon leiten sich davon die hellen Termine ab. Die grün hinterlegten sind noch manuell zu ermitteln.

Die Gaussche Osterformel sichert dass unser System Jahr für Jahr das Datum des Ostersonntags kennt. Daraus wiederum leiten sich die anderen Termine ab.

DELIMITER //
DROP FUNCTION IF EXISTS easter
//
CREATE FUNCTION easter(inYear YEAR) RETURNS DATE DETERMINISTIC
BEGIN
DECLARE a, b, c, d, e, k, m, n, p, q INT;
DECLARE easter DATE;

SET k = FLOOR(inYear / 100);
SET a = MOD(inYear, 19);
SET b = MOD(inYear, 4);
SET c = MOD(inYear, 7);
SET q = FLOOR(k / 4);
SET p = FLOOR((13 + 8 * k) / 25);
SET m = MOD((15-p+k-q), 30);
SET d = MOD((19 * a + m), 30);
SET n = MOD((4+k-q), 7);
SET e = MOD((2*b+4*c+6*d+n), 7);

SET easter = CASE
WHEN d + e <= 9 THEN CONCAT_WS('-', inYear, '03', 22 + d + e) WHEN d = 29 AND e = 6 THEN CONCAT_WS('-', inYear, '04-19') WHEN d = 28 AND e = 6 AND a > 10 THEN
CONCAT_WS('-', inYear, '04-18')
ELSE
CONCAT_WS('-', inYear, '04', LPAD(d + e - 9, 2, 0))
END;

RETURN easter;
END
//
DELIMITER ;

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.