Feiertagsname

Ninox Profile

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

Ninox Profile

Bitte die Zeile

for myItem from 1 to 20 do

zu

for myItem from 0 to 19 do

ändern.

Ninox Profile

myItem = myIndex

 

Wann gibt es eigentlich endlich ein richtiges Forum?

Ninox Profile

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 Profile

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.

Ninox Profile

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.

Ninox Profile

@Copytexter

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

Ninox Profile

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.

Ninox Profile

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

Ninox Profile

Nein, sehen wird man ihn nicht, das stimmt.

Antworten