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
-
Bitte die Zeile
for myItem from 1 to 20 do
zu
for myItem from 0 to 19 do
ändern.
-
myItem = myIndex
Wann gibt es eigentlich endlich ein richtiges Forum?
-
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 -
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.
-
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.
-
@Copytexter
Schau dir mal im Webinar-Team die Datenbank 332_Postleitzahlen - Bundesland - Datum - Feiertag an. ;-)
-
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.
-
Bei dem bisschen, was der Prozessor zu rechnen hat, dürfte man keinen Unterschied in der Geschwindigleit sehen. ;-)
-
Nein, sehen wird man ihn nicht, das stimmt.
Content aside
- vor 4 JahrenZuletzt aktiv
- 9Antworten
- 673Ansichten