Also bei mir läuft das auch kurz nach 0 Uhr. Um die Frage zu beantworten, welches ich nutze:
Code: Alles auswählen
! Feiertage
! =======
! Das Skript berechnet das Osterdatum und die Geiertage im aktuellen Jahr
! prueft ob heute und morgen ein tmpR ist und hinterlegt das Ergebnis in den
! Script von Peter Beck (01-2011)
! Österreichergänzung von randyp (05-2012)
! Version 2.2.1r2
! Sachsen eingearbeitet bzw. korrigiert von Matthias Herold (11-2013)
! Sachsen hat Buß- und Bettag: hinzugefügt, Saarland nicht: gelöscht
! von AndiN auf tmp-Variablen umgeschrieben v2.0.1 (Stand: 26.12.2015)
! Es werden folgende Systemvariablen benötigt:
! SV_Feiertag_heute (Typ: Boolean)
! SV_Feiertag_morgen (Typ: Boolean)
boolean tmpM = 1; ! Rosenmontag ein Brauchtumstag? 1=Ja/0=Nein
boolean tmpO = 1; ! Silvester stets ein freier Tag? 1=Ja/0=Nein
boolean tmpP = 1; ! Heiligabend stets ein freier Tag? 1=Ja/0=Nein
string tmpB = "DE"; ! AT oder DE
string tmpC = "NW"; ! Bundesland in DE, in den wir wohnen (in Österreich auch für tmpC AT eintragen)
! Fuer "tmpC" bitte folgende Abkuerzungen benutzen:
! BW = Baden-Württemberg
! BY = Bayern
! BE = Berlin
! BB = Brandenburg
! HB = Bremen
! HH = Hamburg
! HE = Hessen
! MV = Mecklenburg-Vorpommern
! NI = Niedersachsen
! NW = Nordrhein-Westfalen
! RP = RheintmpB-Pfalz
! SL = SaartmpB
! SN = Sachsen
! ST = Sachen-Anhalt
! SH = Schleswig-Holstein
! TH = Thüringen
! AT = Österreich
!****************************************************
! Ab hier Script CODE - Don't change behind this line
!****************************************************
! Berechnen des Ostersonntags im aktuellen Jahr
integer tmpA= system.Date("%Y").ToInteger(); ! Das aktuelle Jahr
integer tmpD; ! Das Tagesdatum vom Ostersonntag
integer tmpE; ! Das Monatsdatum von Ostersonntag
string tmpF; ! Das komplette Datum vom Ostersonntag
integer tmpG; ! Wird für die Berechnungen benötigt
integer tmpH; ! Wird für die Berechnungen benötigt
integer tmpI; ! Wird für die Berechnungen benötigt
integer tmpJ; ! Wird für die Berechnungen benötigt
! Die modifizierte Gauss-Formel nach Lichtenberg
tmpG = ((19 * (tmpA% 19)) + (15 + (((3 * (tmpA/ 100)) + 3) / 4) - (((8 * (tmpA/ 100)) + 13) / 25))) % 30;
tmpH = (tmpG / 29) + (((tmpG / 28) - (tmpG / 29)) * ((tmpA% 19) / 11));
tmpI = 7 - (((21 + tmpG - tmpH) - (7 - ((tmpA+ (tmpA/ 4) + (2 - (((3 * (tmpA/ 100)) + 3) / 4))) % 7))) % 7);
tmpD = (21 + tmpG - tmpH) + tmpI;
! Den errechneten Wert formatieren. Ausgehend vom Monat März
if (tmpD > 31) { ! Der Monat März hat nur 31 Tage -> Ostern im April
tmpE = 4;
tmpD = tmpD - 31;
} else { tmpE = 3; } ! Ostern ist im März
! Das Ergebnis in Variable tmpF hinterlegen
if (tmpD < 10) {
tmpF = "0" # tmpD.ToString() # "." # "0" # tmpE.ToString() # "." # dom.GetObject("SV_Jahr").Value().ToString();
} else {
tmpF = tmpD.ToString() # "." # "0" # tmpE.ToString() # "." # dom.GetObject("SV_Jahr").Value().ToString();
}
! Ermitteln, wieviele Tage der Februar im aktuellen dom.GetObject("SV_Jahr").Value() hat
tmpJ = dom.GetObject("SV_Jahr").Value() % 4;
if (tmpJ == 0) { ! Ein Schaltdom.GetObject("SV_Jahr").Value() -> Feb. = 29 Tage
string tmpZ1= "31,29,31,30,31,30,31,31,30,31,30,31"; ! Anzahl der Tage im Monat Jan.-Dez.
} else {
string tmpZ1 = "31,28,31,30,31,30,31,31,30,31,30,31"; ! Anzahl der Tage im Monat Jan.-Dez.
}
string tmpK = system.Date("%d.%m."); ! Das heutige Datum
integer tmpL = 0;
while (tmpL < 2)
{
boolean tmpR = 0; ! 0/1 = kein/tmpR
!***************************************************************************
! Feste tmpQ bundesweit, fuer DE und AT
!***************************************************************************
if (tmpK == "01.01.") { tmpR = 1; } ! Neudom.GetObject("SV_Jahr").Value()
if (tmpK == "01.05.") { tmpR = 1; } ! MaitmpR - Tag der Arbeit
if (tmpK == "25.12.") { tmpR = 1; } ! 1. Weihnachtstag
if (tmpK == "26.12.") { tmpR = 1; } ! 2. Weihnachtstag
!***************************************************************************
! Feste tmpQ bundesweit in DE
!***************************************************************************
if (tmpB == "DE") {
if (tmpK == "03.10.") { tmpR = 1; } ! Tag der Deutschen Einheit
}
!***************************************************************************
! Feste tmpQ bundesweit in AT
!***************************************************************************
if (tmpB == "AT") {
if (tmpK == "26.10.") { tmpR = 1; } ! Österreichischer NationaltmpR
if (tmpK == "08.12.") { tmpR = 1; } ! Maria Empfaengnis
}
!***************************************************************************
! Eigene, feste tmpQ?
!***************************************************************************
if ((tmpP) && (tmpK == "24.12.")) { tmpR = 1; } ! Weihnachten
if ((tmpO) && (tmpK == "31.12.")) { tmpR = 1; } ! tmpO
!***************************************************************************
! Fester tmpR in BW, BY, ST, AT
!***************************************************************************
if ((tmpC == "BW") || (tmpC == "BY") || (tmpC == "ST") || (tmpB == "AT")) {
if (tmpK == "06.01.") { tmpR = 1; } ! Erscheinungsfest - Hl. 3 Koenige
}
!***************************************************************************
! Fester tmpR in BB, MV, SA, ST, TH, SN
!***************************************************************************
if ((tmpC == "BB") || (tmpC == "MV") || (tmpC == "SA") || (tmpC == "ST") || (tmpC == "TH") || (tmpC == "SN")) {
if (tmpK == "31.10.") { tmpR = 1; } ! Reformationstag
}
!***************************************************************************
! Fester tmpR in BW, BY, NW, RP, SL, AT
!***************************************************************************
if ((tmpC == "BW") || (tmpC == "BY") || (tmpC == "NW") || (tmpC == "RP") || (tmpC == "SL") || (tmpB == "AT")) {
if (tmpK == "01.11.") { tmpR = 1; } ! Allerheiligen
}
!***************************************************************************
! Fester tmpR in BY (nicht überall), SL, AT
!***************************************************************************
if ((tmpC == "BY") || (tmpC == "SL") || (tmpB == "AT")) {
if (tmpK == "15.08.") { tmpR = 1; } ! Maria Himmelfahrt
}
!***************************************************************************
!** Bewegliche tmpQ bundesweit **
!***************************************************************************
string tmpQ = "";
if (tmpB == "DE") {
tmpQ = "0,1,-2,39,50"; ! Array mit Differenztage zum Ostersonntag
! Ostersonntag, Ostermontag, Karfreitag, Christi Himmelfahrt, Pfingstmontag
}
if (tmpB == "AT") {
tmpQ = "0,1,39,50"; ! Array mit Differenztage zum Ostersonntag
! Ostersonntag, Ostermontag, Christi Himmelfahrt, Pfingstmontag
}
!***************************************************************************
! Bewegliche tmpQ BW, BY, HE, NW, RP, SL, (SA, TH nicht überall), AT
!***************************************************************************
if ((tmpC == "BW") || (tmpC == "BY") || (tmpC == "HE") || (tmpC == "NW") || (tmpC == "RP") || (tmpC == "SL") || (tmpC == "SA") || (tmpC == "TH") || (tmpB == "AT")) {
tmpQ = tmpQ # ",60"; ! Fronleichnam
}
!***************************************************************************
!*** Hier evtl. weitere Feier-/Brauchtumstage ***
!***************************************************************************
if (tmpM) {
tmpQ = tmpQ # ",-48"; ! tmpM stets 48 Tage vor dem Ostersonntag
}
!***************************************************************************
! Ab hier werden die Feiertage berechnet
!***************************************************************************
! Anzahl der Tage im Ostermonat
tmpJ = (3 * tmpE) - 3;
integer tmpS = tmpZ1.Substr(tmpJ, 2).ToInteger(); ! Anzahl der Tage im Ostermonat
string tmpT; ! Das tmpRtmpK
integer tmpU; ! Anzahl der Tage von Ostersonntag entfernt
boolean tmpV; ! Für die Berechnungen in der while-tmpV notwendig
string tmpW;
foreach(tmpW, tmpQ.Split(",")) {
tmpU = tmpW.ToInteger();
tmpV = 1;
tmpJ = tmpD + tmpU; ! Differenztage zum Referenztag hinzurechnen
if (tmpU > 0) {
if (tmpJ > tmpS) {
tmpJ = tmpJ - tmpS; ! Sind wir ausserhalb des Referenzmonats?
} else { ! Nein => BerechnungtmpV nicht tmpLen.
tmpV = 0;
tmpH = tmpE;
}
} else {
if (tmpJ > 0) { ! Wenn innerhalb des Referenzmonats => BerechnungstmpV nicht tmpLen.
tmpV = 0;
tmpH = tmpE;
}
}
tmpG = 0;
if (tmpU > 0) {
while (tmpV) {
tmpG = tmpG + 1.00;
tmpH = tmpE + tmpG;
tmpI = (3 * tmpH) - 3;
tmpJ = tmpJ - tmpZ1.Substr(tmpI, 2).ToInteger();
if (tmpJ <= 0) { ! Aktueller Monat gefunden
tmpV = 0;
tmpJ = tmpJ + tmpZ1.Substr(tmpI, 2).ToInteger(); ! Wieder addieren, um den Tag zu berechnen
}
}
} else {
if (tmpU < 0) {
while (tmpV) {
tmpG = tmpG + 1.00;
tmpH = tmpE - tmpG;
tmpI = (3 * tmpH) - 3;
tmpJ = tmpJ + tmpZ1.Substr(tmpI, 2).ToInteger();
if (tmpJ > 0) { ! Aktueller Monat gefunden
tmpV = 0;
}
}
}
}
if (tmpJ < 10) {
tmpT = "0" # tmpJ.ToString() # ".";
} else {
tmpT = tmpJ.ToString() # ".";
}
if (tmpH < 10) {
tmpT = tmpT # "0" # tmpH.ToString() # ".";
} else {
tmpT = tmpT # tmpH.ToString() # ".";
}
if (tmpK == tmpT) { tmpR = 1; }
}
!****************************
! Beweglicher tmpR im SN
!****************************
if (tmpC == "SN") {
! Buß- und Bettag (Mittwoch vor dem Sonntag vor dem 1. Advent)
tmpU = 32; ! 32 Tage vor dem 4. Advent
! Um den 4. Advent zu ermitteln, muss zunächst der Wochentag des 24. Dez. ermittelt werden
! Wochentagberechnung wie folgt:
! TZ = Tag mod 7 => Tag = 24 fuer den 24.12.
! MZ = 5 => 0,3,3,6,1,4,6,2,5,0,3,5 (Fuer jeden Monat Jan. bis Dez. eine Ziffer)
! JZ = (tmpJ + (tmpJ / 4)) mod 7 => tmpJ = 10, die letzten beiden Ziffern der dom.GetObject("SV_Jahr").Value()estmpJ 2010
! JHZ = (3 - (tmpJ mod 4)) * 2 => tmpJ = 20, die ersten beiden Ziffern der dom.GetObject("SV_Jahr").Value()estmpJ 2010
! SJK = tmpJ => Schaltdom.GetObject("SV_Jahr").Value()eskorrektur: tmpJ = 0 wenn kein Schaltdom.GetObject("SV_Jahr").Value(), sonst tmpJ = 6
! Ergebnis = (TZ + MZ + JZ + JHZ + SJK) mod 7 => 0 = So, 1 = Mo, 2 = Di, 3 = Mi, 4 = Do, 5 = Fr, 6 = Sa
! Mit dieser Rechnung kann man zu jedem Datum den Wochentag berechnen.
tmpG = tmpF.Substr(8, 2).ToInteger();
tmpJ = (tmpG + (tmpG / 4)) % 7;
tmpG = tmpF.Substr(6, 2).ToInteger();
tmpH = ((3 - (tmpG % 4)) * 2) + tmpJ;
tmpG = tmpF.Substr(6, 4).ToInteger() % 4;
if (tmpG == 0) { tmpJ = 6; } else { tmpJ = 0; }
tmpG = ((24 % 7) + 5 + tmpH + tmpJ) % 7; ! Ergebnis (tmpG) ist die WochentagstmpJ
! tmpR ermitteln: 30 Novembertage - (tmpU + WochentagstmpJ - 24)
! Der Monat ist stets der November
tmpJ = 30 - (tmpU + tmpG - 24);
tmpT = tmpJ.ToString() # ".11.";
if (tmpK == tmpT) { tmpR = 1; }
}
if (tmpL == 0) {
dom.GetObject('SV_Feiertag_heute').State(tmpR);
tmpL = 1;
! Datum von morgen für den 2. tmpL ermitteln
tmpG = system.Date("%d").ToInteger() + 1.00; ! Einen Tag weiter --> morgen
tmpW = system.Date("%m");
tmpH = tmpW.ToInteger();
tmpJ = (3 * tmpH) - 3;
tmpI = tmpZ1.Substr(tmpJ, 2).ToInteger(); ! Anzahl der Tage im aktuellen Monat
if (tmpG > tmpI) { ! Wenn Monatsgrenze überschritten wurde
tmpK = "01.";
if (tmpH == 12) {
tmpK = tmpK # "01.";
} else {
tmpH = tmpH + 1.00;
if (tmpH < 10) { tmpK = tmpK # "0" # tmpH.ToString() # "."; } else { tmpK = tmpK # tmpH.ToString() # "."; }
}
} else {
if (tmpG < 10) { tmpK = "0" # tmpG.ToString() # "." # tmpW # ".";} else { tmpK = tmpG.ToString() # "." # tmpW # "."; }
}
} else {
dom.GetObject('SV_Feiertag_morgen').State(tmpR);
tmpL = 2;
}
}