Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Friese am 04.08.03 - 14:02:46
-
Hallo!
Hat (zufällig) jemend einen Script, mit dem ich die Feiertage eines Jahres errechnen kann? Sprich, daß ich am Anfang des Jahres einen Button drücke und mir alle Feiertage ausgegeben werden.
Über Antworten wäre ich sehr dankbar.
mfg
Friese
-
... geh mal über die suche, da gab's mal was
-
für Ostern gibt es da eine Formel von Gauss
gilt für die Jahre 1900 bis 2099:
Wenn man den den Divisionsrest aus Jahreszahl dividiert durch 19 nimmt und diese Zahl mit 19 mutipliziert und die Konstante 24 addiert und dann das Ganze durch 30 dividiert, erhaelt man eine Zahl, die man sich merken sollte. Nun braucht man nur noch die Jahreszahl durch 4 teilen, den Rest verdoppeln, dann das 4-fache des Divisionsrestes von Jahreszahl dividiert durch 7 hinzuaddieren und das 6-fache der oben gemerkten Zahl addieren, die Konstante 5 dazuaddieren und das Ganze durch 7 teilen. Diese Zahl plus der oben gemerkten Zahl ( :o etwa vergessen?) minus 9 ergibt beinahe den Ostersonntag - aber auch nur, wenn dieser auf den Monat April faellt. Kommt allerdings der 26. heraus, so wird daraus der 19. April. Und ehe man den 25. errechnet hat, sollte man pruefen ob die erste gemerkte Zahl ( :o :o :o na - immer noch im Kopf?) nicht etwa 28 ist und der Divisionsrest der Jahreszahl durch 19 groesser als 10 ist - dann ist naemlich am 18. April Ostern. - Geschafft!!
easy, oder ??
;D ;D ;D
-
Anton Tauscher (username ata) hat auf seiner Webseite eine gute Script-Bibliothek, wenn mich nicht alles täuscht.
Dann kannst du dir die von eknori angesprochenen grundlegenden Mathe-Operationen sparen.
-
Hi,hier eine VB formel
die lässt sich aber leicht in LS umsetzen:
Ausgehend vom Ostersonntag kann man die Feiertage berechnen:
Function Ostern(Yr As Integer) As Date
Dim D As Integer
D = (((255 - 11 * (Yr Mod 19)) - 21) Mod 30) + 21
Ostern = DateSerial(Yr, 3, 1) + D + (D > 48) + 6 - _
((Yr + Yr \ 4 + D + (D > 48) + 1) Mod 7)
End Function
Weitere Feiertage:
Neujahr = DateSerial(Year(Now), 1, 1)
Maifeiertag = DateSerial(Year(Now), 5, 1)
Karfreitag = Ostern(Year(Now)) - 2
Ostermontag = Ostern(Year(Now)) + 1
Himmelfahrt = Ostern(Year(Now)) + 39
Pfingstsonntag = Ostern(Year(Now)) + 49
Pfingstmontag = Ostern(Year(Now)) + 50
Fronleichnam = Ostern(Year(Now)) + 60
TagDeutscheEinheit = DateSerial(Year(Now), 10, 3)
Quelle:
http://www.schmittis-page.de/index.html?/excel/vba/t62.htm
Andreas
-
wenn du jetzt noch die Funktionsweise von DateSerial posten könntest, waäre es schon fast perfect :D
-
Hi,
hier was zu der Funktion:
http://www-mmt.inf.tu-dresden.de/Docs/iis3/ASP_Docs/ref/vbs/vbscript/69.htm
Hab noch was direkt in LS gefunden - hier die wichtigste Passage:
(c) by Raimund Mann, 1997
Sei Y die 2-stellige Jahreszahl:
If Y < 51 Then
' Y = Y+2000
' Else
' Y=Y+1900
' End If
'Berechne den Ostersonntag für das angegebene Jahr
' nach der Methode von Butcher
a=Int(Y Mod 19)
b= Int(Y/100)
c=Int(Y Mod 100)
d=Int(b/4)
e=Int(b Mod 4)
f=Int((b+8)/25)
g=Int((b-f+1)/3)
h=Int((19*a+b-d-g+15) Mod 30)
i=Int(c/4)
k=Int(c Mod 4)
l=Int((32+2*e+2*i-h-k) Mod 7)
m=Int((a+11*h+22*l)/451)
EasterMonth =Int((h+l-7*m+114)/31) ' [3=March, 4=April]
p=Int((h+l-7*m+114) Mod 31)
EasterDay=p+1 '(date in Easter Month)
EasterDate = Cstr(EasterDay) + "." + Cstr(EasterMonth) + "."
'Basierend auf dem Ostersonntag berechne alle anderen Feiertage
'Die beweglichen Feiertage vor Ostern
'-48 Rosenmontag
FTListe("Rosenmontag") = Left$(Cstr(Datenumber(Y,EasterMonth,EasterDay-48)),6)
'-47 Faschingsdienstag
FTListe("Faschingsdienstag") = Left$(Cstr(Datenumber(Y,EasterMonth,EasterDay-47)),6)
'-46 Aschermittwoch
FTListe("Aschermittwoch") = Left$(Cstr(Datenumber(Y,EasterMonth,EasterDay-46)),6)
' -3 Gründonnerstag
FTListe("Gründonnerstag") = Left$(Cstr(Datenumber(Y,EasterMonth,EasterDay-3)),6)
' -2 Karfreitag
FTListe("Karfreitag") = Left$(Cstr(Datenumber(Y,EasterMonth,EasterDay-2)),6)
'Die beweglichen Feiertage nach Ostern:
' 0 OsterSonntag
FTListe("Ostersonntag") = Left$(Cstr(Datenumber(Y,EasterMonth,EasterDay)),6)
'1 Ostermontag
FTListe("Ostermontag") = Left$(Cstr(Datenumber(Y,EasterMonth,EasterDay+1)),6)
'39 Christi Himmelfahrt (Donnerstag)
FTListe("Christi Himmelfahrt") = Left$(Cstr(Datenumber(Y,EasterMonth,EasterDay+39)),6)
'49 Pfingstsonntag
FTListe("Pfingstsonntag") = Left$(Cstr(Datenumber(Y,EasterMonth,EasterDay+49)),6)
'50 Pfingstmontag
FTListe("Pfingstmontag") = Left$(Cstr(Datenumber(Y,EasterMonth,EasterDay+50)),6)
'60 Fronleichnam (Donnerstag; in BW, BAY, HES, NRW, RPF, SAL, THÜ)
FTListe("Fronleichnam") = Left$(Cstr(Datenumber(Y,EasterMonth,EasterDay+60)),6)
'Buß- und Bettag ist der 3 Mittwoch im November
'mit welchem Wochentag beginnt der November
woTag = Weekday(Datenumber(Y,11,1))
'Buß- und Bettag ist dann
If woTag = 4 Then
FTListe("Buß- und Bettag") = Left$(Cstr(Datenumber(Y,11,15)),6)
Elseif woTag > 4 Then
FTListe("Buß- und Bettag") = Left$(Cstr(Datenumber(Y,11,15+(7-(woTag-4)))),6)
Elseif woTag < 4 Then
FTListe("Buß- und Bettag") = Left$(Cstr(Datenumber(Y,11,15+(4-woTag))),6)
End If
-
... auf meiner Homepage habe ich eine kleine Demo unter
http://www.anton-tauscher.de/download/DateHandling.nsf (http://www.anton-tauscher.de/download/DateHandling.nsf)
http://www.anton-tauscher.de/download/DateHandling.zip (http://www.anton-tauscher.de/download/DateHandling.zip)
... demnächst werde ich eine internationale Variante ins Netz stellen - es gab sehr viel Anfragen aus dem Ausland...
ata