VBScript
This function checks a given date for a public holiday in Austria. It takes the different federal states into consideration.
Please see the Introduction chapter for some usage instructions.
'------------------------------------------------------------------- ' Feiertagsüberprüfung Österreich ' ' Author: Dominik Kronsteiner (PCH IT Solution GmbH - www.pch.at) ' ' Version: v1.1 - 2019-09-05 '------------------------------------------------------------------- ' Österreich const vb_FS_NO = 1 ' Niederösterreich const vb_FS_OO = 2 ' Oberösterreich const vb_FS_WI = 4 ' Wien const vb_FS_SM = 8 ' Steiermark const vb_FS_KA = 16 ' Kärnten const vb_FS_BU = 32 ' Burgenland const vb_FS_SA = 64 ' Salzburg const vb_FS_TI = 128 ' Tirol const vb_FS_VO = 256 ' Vorarlberg '------------------------------------------------------------------- ' Name: IsPublicHolidayAT ' ================= ' ' Returns true if the given date is a public holiday in the given Austrian ' federal state. Multiple federal states can be combined with "OR" ' ' Parameter: ' nFederalState single or combination of federal states ' vCheckDate vbscript date to check (e.g. as returned by now) or ' "" (for current date) ' ' Returns: ' Boolean True = is public holiday ' '-------------------------------------------------------------------- Function IsPublicHolidayAT ( nFederalState, vCheckDate ) On Error Resume Next PBXScript.OutputTrace "Holiday - -------> IsPublicHolidayAT" PBXScript.OutputTrace "Holiday - nFederalState = " & nFederalState PBXScript.OutputTrace "Holiday - vCheckDate = " & vCheckDate Dim bReturn bReturn = False Dim sReturn sReturn = "No Holiday Found" Dim a, b, c, d, e, f Dim nTempYear, vTempDate Dim Neujahr, dreiKoenige, Josef, Karfreitag, Ostersonntag, Ostermontag Dim Staatsfeiertag, Florian, ChrHimmelfahrt, Pfingstmontag, Fronleichnam Dim MarieaeHimmelfahrt, Rupert, TagderVolksabstimmung, Nationalfeiertag Dim Allerheiligen, Martin, Leopold, MariaeEmpfaengnis, HeiligAbend, Christtag, Stefanitag, Silvester if not IsDate(vCheckDate) then vCheckDate = Now vTempDate = DateSerial(Year(vCheckDate), Month(vCheckDate), Day(vCheckDate)) nTempYear = Year(vTempDate) PBXScript.OutputTrace "Holiday - Using nTempYear = " & nTempYear PBXScript.OutputTrace "Holiday - Using vTempDate = " & vTempDate ' Gauß Formel a = nTempYear Mod 19 b = nTempYear \ 100 c = (8 * b + 13) \ 25 - 2 d = b - (nTempYear \ 400) - 2 e = (19 * (nTempYear Mod 19) + ((15 - c + d) Mod 30)) Mod 30 if e = 28 then if a > 10 then e = 27 end if elseif e = 29 then e = 28 end if f = (d + 6 * e + 2 * (nTempYear Mod 4) + 4 * (nTempYear Mod 7) + 6) Mod 7 ' Feiertage konfigurieren Neujahr = DateSerial(nTempYear, 1, 1) dreiKoenige = DateSerial(nTempYear, 1, 6) Josef = DateSerial(nTempYear, 3, 19) Karfreitag = DateSerial(nTempYear, 3, e + f + 22 - 2) Ostersonntag = DateSerial(nTempYear, 3, e + f + 22) Ostermontag = DateSerial(nTempYear, 3, e + f + 22 + 1) Staatsfeiertag = DateSerial(nTempYear, 5, 1) Florian = DateSerial(nTempYear, 5, 4) ChrHimmelfahrt = DateSerial(nTempYear, 3, e + f + 22 + 39) Pfingstmontag = DateSerial(nTempYear, 3, e + f + 22 + 50) Fronleichnam = DateSerial(nTempYear, 3, e + f + 22 + 60) MarieaeHimmelfahrt = DateSerial(nTempYear, 8, 15) Rupert = DateSerial(nTempYear, 9, 24) TagderVolksabstimmung = DateSerial(nTempYear, 10, 10) Nationalfeiertag = DateSerial(nTempYear, 10, 26) Allerheiligen = DateSerial(nTempYear, 11, 1) Martin = DateSerial(nTempYear, 11, 11) Leopold = DateSerial(nTempYear, 11, 15) MariaeEmpfaengnis = DateSerial(nTempYear, 12, 8) HeiligAbend = DateSerial(nTempYear, 12, 24) Christtag = DateSerial(nTempYear, 12, 25) Stefanitag = DateSerial(nTempYear, 12, 26) Silvester = DateSerial(nTempYear, 12, 31) ' Feiertag? select case vTempDate case Neujahr bReturn = True sReturn = "Neujahr" case dreiKoenige bReturn = True sReturn = "dreiKoenige" case Karfreitag bReturn = True sReturn = "Karfreitag" case Ostermontag bReturn = True sReturn = "Ostermontag" case Staatsfeiertag bReturn = True sReturn = "Staatsfeiertag" case ChrHimmelfahrt bReturn = True sReturn = "ChrHimmelfahrt" case Pfingstmontag bReturn = True sReturn = "Pfingstmontag" case Fronleichnam bReturn = True sReturn = "Fronleichnam" case MarieaeHimmelfahrt bReturn = True sReturn = "MarieaeHimmelfahrt" case Nationalfeiertag bReturn = True sReturn = "Nationalfeiertag" case Allerheiligen bReturn = True sReturn = "Allerheiligen" case MariaeEmpfaengnis bReturn = True sReturn = "MariaeEmpfaengnis" case HeiligAbend bReturn = True sReturn = "HeiligAbend" case Christtag bReturn = True sReturn = "Christtag" case Stefanitag bReturn = True sReturn = "Stefanitag" case Silvester bReturn = True sReturn = "Silvester" case Josef if (nFederalState and (vb_FS_KA or vb_FS_SM or vb_FS_TI or vb_FS_VO or vb_FS_WI)) then bReturn = True sReturn = "Josef" case Florian if (nFederalState and (vb_FS_OO)) then bReturn = True sReturn = "Florian" case Rupert if (nFederalState and (vb_FS_SA)) then bReturn = True sReturn = "Rupert" case TagderVolksabstimmung if (nFederalState and (vb_FS_KA)) then bReturn = True sReturn = "TagderVolksabstimmung" case Martin if (nFederalState and (vb_FS_BU)) then bReturn = True sReturn = "Martin" case Leopold if (nFederalState and (vb_FS_NO or vb_FS_WI)) then bReturn = True sReturn = "Leopold" end select IsPublicHolidayAT = bReturn PBXScript.OutputTrace "Holiday - bReturn = " & bReturn PBXScript.OutputTrace "Holiday - " & sReturn PBXScript.OutputTrace "Holiday - <------- IsPublicHolidayAT" End Function
The first parameter of the function is either one or a list federal states (linked by OR). See the above code for the possible values for each federal state.
The second parameter is the date to check. This can either be a VBScript variant type (like e.g. Now returns or have been loaded from a database field of type datetime) or a string representing the date to be checked. Please note that in this case the string must be a valid date according the the regional settings configuration of your server machine (in regard to is format).
Examples
-
Check in Wien for current date:
IsPublicHolidayAT(vb_FS_WI, "")
IsPublicHolidayAT(vb_FS_WI, Now)
-
Check in Kärnten and Tirol for a fixed given date:
IsPublicHolidayAT(vb_FS_KA or vb_FS_TI, "01.05.2015")
This function is based on the initial version IsPublicHolidayDE written by JoergG. kroni99 has created a new version to check for public holidays in Austria.
This function was initially posted into this forum topic.
By Tom Wellige
Recommended Comments
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now