0

Feiertagsname

function holiday_name(myDate : date) do
let myYear := year(myDate);
“Ostersonntag”;
let g := myYear % 19;
let c := myYear / 100;
let h := (c - c / 4 - (8 * c + 13) / 25 + 19 * g + 15) % 30;
let i := h - h / 28 * (1 - 29 / (h + 1) * (21 - g) / 11);
let j := (myYear + myYear / 4 + i + 2 - c + c / 4) % 7;
let l := i - j;
let myMonth := floor(3 + (l + 40) / 44);
let myDay := floor(l + 28 - 31 * myMonth / 4);
“Arrays füllen”;
let myHolidayDates := [date(myYear, 1, 1), date(myYear, 1, 6), date(myYear, 5, 1), date(myYear, 8, 8), date(myYear, 8, 15), date(myYear, 10, 3), date(myYear, 10, 31), date(myYear, 11, 1), date(myYear, 12, 25), date(myYear, 12, 26), date(myYear, myMonth, myDay - 3), date(myYear, myMonth, myDay - 2), date(myYear, myMonth, myDay), date(myYear, myMonth, myDay + 1), date(myYear, myMonth, myDay + 39), date(myYear, myMonth, myDay + 49), date(myYear, myMonth, myDay + 50), date(myYear, myMonth, myDay + 60), date(myYear, 12, 25 - weekday(date(myYear, 12, 25)) - 33)];
let myHolidayNames := [“Neujahr”, “Heilige Drei Könige”, “Tag der Arbeit”, “Augsburger Friedensfest”, “Mariä Himmelfahrt”, “Tag der Deutschen Einheit”, “Reformationstag”, “Allerheiligen”, “1. Weihnachtsfeiertag”, “2. Weihnachtsfeiertag”, “Gründonnerstag”, “Karfreitag”, “Ostersonntag”, “Ostermontag”, “Christi Himmelfahrt”, “Pfingstsonntag”, “Pfingstmontag”, “Fronleichnam”, “Buß- und Bettag”];
let myHolidayDates := [date(myYear, 1, 1), date(myYear, 1, 6), date(myYear, 5, 1), date(myYear, 8, 8), date(myYear, 8, 15), date(myYear, 10, 3), date(myYear, 10, 31), date(myYear, 11, 1), date(myYear, 12, 25), date(myYear, 12, 26), date(myYear, myMonth, myDay - 3), date(myYear, myMonth, myDay - 2), date(myYear, myMonth, myDay), date(myYear, myMonth, myDay + 1), date(myYear, myMonth, myDay + 39), date(myYear, myMonth, myDay + 49), date(myYear, myMonth, myDay + 50), date(myYear, myMonth, myDay + 60), date(myYear, 12, 25 - weekday(date(myYear, 12, 25)) - 33)];
“”;
let myHolidayName := “”;
for myIndex from 1 to 20 do
if myDate = item(myHolidayDates, myIndex) then
myHolidayName := item(myHolidayNames, myIndex);
myIndex := 20
end
end;
myHolidayName
end

9 Antworten

null
    • Peter_Gaede.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Bitte die Zeile

    for myItem from 1 to 20 do

    zu

    for myItem from 0 to 19 do

    ändern.

    • Peter_Gaede.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    myItem = myIndex

     

    Wann gibt es eigentlich endlich ein richtiges Forum?

    • Peter_Gaede.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Funktionen komplett überarbeitet:

    is_holiday(Datum, Bundesland)

    holiday_name(Datum, Bundesland)

    Datum: date

    Bundesland: text (Offizielle Kurzform)

     

    “0-18 wenn Feiertag, sonst -1 / nur hier intern verwendet”;
    function get_holiday_index(myDate : date,myState:text) do
    let myYear := year(myDate);
    “Ostersonntag”;
    let g := myYear % 19;
    let c := myYear / 100;
    let h := (c - c / 4 - (8 * c + 13) / 25 + 19 * g + 15) % 30;
    let i := h - h / 28 * (1 - 29 / (h + 1) * (21 - g) / 11);
    let j := (myYear + myYear / 4 + i + 2 - c + c / 4) % 7;
    let l := i - j;
    let myMonth := floor(3 + (l + 40) / 44);
    let myDay := floor(l + 28 - 31 * myMonth / 4);
    “Arrays füllen”;
    let myHolidayDates := [
    date(myYear, 1, 1),
    date(myYear, 1, 6),
    date(myYear, 3, 8),
    date(myYear, myMonth, myDay - 2),
    date(myYear, myMonth, myDay),
    date(myYear, myMonth, myDay + 1),
    date(myYear, 5, 1),
    date(myYear, 5, 8),
    date(myYear, myMonth, myDay + 39),
    date(myYear, myMonth, myDay + 49),
    date(myYear, myMonth, myDay + 50),
    date(myYear, myMonth, myDay + 60),
    date(myYear, 8, 8),
    date(myYear, 8, 15),
    date(myYear, 9, 20),
    date(myYear, 10, 3),
    date(myYear, 10, 31),
    date(myYear, 11, 1),
    date(myYear, 12, 25 - weekday(date(myYear, 12, 25)) - 33),
    date(myYear, 12, 25),
    date(myYear, 12, 26)
    ];
    “”;
    “Bundesländer”;
    “1:BW = Baden-Württemberg”;
    “2:BY = Bayern”;
    “4:BE = Berlin”;
    “8:BB = Brandenburg”;
    “16:HB = Bremen”;
    “32:HH = Hamburg”;
    “64:HE = HE”;
    “128:MV = Mecklenburg-Vorpommern”;
    “256:NI = Niedersachsen”;
    “512:NRW = Nordrhein-Westfalen”;
    “1024:RP = Rheinland-Pfalz”;
    “2048:SL = Saarland”;
    “4096:SN = Sachsen”;
    “8192:ST = Sachsen-Anhalt”;
    “16384:SH = Schleswig-Holstein”;
    “32768:TH = Thüringen”;
    let myTrues := [
    true,
    myState = “BW” or myState = “BY” or myState = “ST”,
    myState = “BE”,
    true,
    myState = “BB”,
    true,
    true,
    myState = “BE”,
    true,
    myState = “BB”,
    true,
    myState = “BW” or myState = “BY” or myState = “HE” or myState = “NRW” or myState = “RP” or myState = “SL”,
    myState = “BY”,
    myState = “BY” or myState = “SL”,
    myState = “TH”,
    true,
    myState = “BB” or myState = “HB” or myState = “HH” or myState = “MV” or myState = “NI” or myState = “SN” or myState = “ST” or myState = “SH” or myState = “TH”,
    myState = “BW” or myState = “BY” or myState = “NRW” or myState = “RP” or myState = “SL”,
    myState = “SN”,
    true,
    true
    ];
    “”;
    let myResult := -1;
    for myIndex from 0 to 19 do
    if myDate = item(myHolidayDates, myIndex) and item(myTrues, myIndex) then
    myResult := myIndex;
    myIndex := 19
    end
    end;
    “”;
    myResult
    end;
    “”;
    “Ist Datum ein Feiertag”;
    function is_holiday(myDate : date,myState:text) do
    get_holiday_index(myDate, myState) > -1
    end;
    “”;
    “Name des Feiertages”;
    function holiday_name(myDate : date,myState:text) do
    “Array füllen”;
    let myHolidayNames := [
    “Neujahr”,
    “Heilige Drei Könige”,
    “Internationaler Frauentag”,
    “Karfreitag”,
    “Ostersonntag”,
    “Ostermontag”,
    “Tag der Arbeit”,
    “Tag der Befreiung”,
    “Christi Himmelfahrt”,
    “Pfingstsonntag”,
    “Pfingstmontag”,
    “Fronleichnam”,
    “Augsburger Friedensfest”,
    “Mariä Himmelfahrt”,
    “Weltkindertag”,
    “Tag der Deutschen Einheit”,
    “Reformationstag”,
    “Allerheiligen”,
    “Buß- und Bettag”,
    “1. Weihnachtsfeiertag”,
    “2. Weihnachtsfeiertag”
    ];
    “”;
    item(myHolidayNames, get_holiday_index(myDate,myState))
    end

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Peter, danke für die Idee. Sieht nach viel Arbeit aus. Der Vollständigkeit halber: Im Webinar-Team gibt es eine Datenbank namens “210_GlobaleFunktion_IstFeiertag”, die einen anderen Ansatz verfolgt. Dort sind sämtliche Feiertage bis 2035 in einer eigenen Tabelle hinterlegt. Bei der Abfrage lässt sich auch die PLZ mit einbeziehen (z. B. die eigene oder die eines Kunden), anhand derer automatisch ermittelt wird, ob das Datum in dem entsprechenden Bundesland ein Feiertag ist.

    • Peter_Gaede.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Meine Funktionen berechnen, ob das Datum ein Feiertag ist. Aber die Abfrage auch nach PLZ hört sich gut an, mal schauen, ob ich das einbaue.

    • Peter_Gaede.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    @Copytexter

    Schau dir mal im Webinar-Team die Datenbank 332_Postleitzahlen - Bundesland - Datum - Feiertag an. ;-)

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja, sehr schön. Alternativen sind immer gut! Als notorischer Faulpelz mache ich es mir aber gerne möglichst leicht, weshalb ich persönlich die tabellenbasierte Variante bevorzuge. Viel weniger Code, einfach zu aktualisieren - und schneller ist sie wahrscheinlich auch. Aber das ist natürlich Geschmacksache.

    • Peter_Gaede.2
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Bei dem bisschen, was der Prozessor zu rechnen hat, dürfte man keinen Unterschied in der Geschwindigleit sehen. ;-)

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Nein, sehen wird man ihn nicht, das stimmt.