 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
DerRaphael
Anmeldedatum: 09.01.2008 Beiträge: 825 Wohnort: Zuhause
|
Verfasst am: So Feb 17, 2008 10:45 pm Titel: Feiertagsberechnung 0.1 |
|
|
Mit dieser kleinen Funktion kann man die Feiertag pro Jahr berechnen.
| Code: | Feiertage2008 := Feiertage("2008","Komplett")
out := "Feiertage 2008`n`n`t"
Loop, Parse, FeierTage2008, |
{
StringSplit, w, A_LoopField, :, %A_Space%
Feiertag := RegExReplace(w1,"([A-Z])"," $1")
FormatTime, Datum, %w2%, dddd', den 'd. MMMM yyyy
out .= Feiertag " findet am " Datum " statt.`n`t"
}
MsgBox % out
return
FeierTage(_Jahr="",Art="",Delimiter="|")
{
_Jahr := (_Jahr) ? _Jahr : A_YYYY
FeiertagListe=
(LTrim Join,
NeuJahr=01.01.Jahr
HlDreiKönige=06.01.Jahr
Rosenmontag=Ostersonntag-48
Faschingsdienstag=Ostersonntag-47
Aschermittwoch=Ostersonntag-46
Gründonnerstag=Ostersonntag-3
Karfreitag=Ostersonntag-2
Karsamstag=Ostersonntag-1
Ostermontag=Ostersonntag+1
ChristiHimmelfahrt=Ostersonntag+39
Pfingstsonntag=Ostersonntag+49
Pfingstmontag=Ostersonntag+50
FrankfurterWäldchestag=Ostersonntag+51
Fronleichnam=Ostersonntag+60
TagDerArbeit=01.05.Jahr
AugsburgerFriedensfest=08.08.Jahr
MariäHimmerfahrt=15.08.Jahr
TagDerDeutschenEinheit=03.10.Jahr
Reformationstag=31.10.Jahr
Alleheiligen=01.11.Jahr
MariäEmpfängnis=08.12.Jahr
HeiligAbend=24.12.Jahr
ErsterWeihnachtstag=25.12.Jahr
ZweiterWeihnachtstag=26.12.Jahr
Silvester=31.12.Jahr
)
;Ostersonntagberechnung: (Quelle: http://de.wikipedia.org/wiki/Osterdatum)
g := mod(_Jahr,19), c := _Jahr//100
h := mod((c-(c//4)-((8*c+13)//25)+19*g+15),30)
i := h-(h//28)*(1-(29//(h+1))*((21-G)//11))
j := mod((_Jahr+(_Jahr//4)+i+2-c+(c//4)),7)
l := i-j
oMonat := 3 + ((l+40)//44), OSonntag := l + 28 - 31 * (oMonat//4)
oDate := ((StrLen(oSonntag)<2) ? "0":"") oSonntag ".0" oMonat "." Jahr " 00:00AM"
OsterSonntag := DateParse(oDate)
;Feiertage
out := ""
Loop, Parse, FeiertagListe,`,
{
StringSplit, t, A_LoopField, =
if RegExMatch(t2,"[-+]")
{
mod := (InStr(t2,"-")) ? 1 : 0, d := RegExReplace(t2,"[^\d]+?")
srcVar := RegExReplace(t2,"i)[^a-zßöäü]+")
srcValue := %srcVar%, dayMod := (mod) ? d * (-1) : d
EnvAdd, srcValue, %dayMod%, days
} else if RegExMatch(t2,"i)Jahr") {
srcValue := RegExReplace(t2,"i)Jahr",_Jahr) " 00:00AM"
srcValue := DateParse(srcValue)
} else {
srcValue := t2
}
out .= ((Art="Komplett") ? t1 ": " : "") srcValue Delimiter
}
Return SubStr(out,1,-1)
}
DateParse(str) { ;v 1.04
; Titans DayParse: http://www.autohotkey.net/~Titan/#dateparse
; Discussion: http://www.autohotkey.com/forum/topic20405.html
; Thx, Titan
static e2 = "i)(?:(\d{1,2}+)[\s\.\-\/,]+)?(\d{1,2}|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\w*)[\s\.\-\/,]+(\d{2,4})"
str := RegExReplace(str, "((?:" . SubStr(e2, 42, 47) . ")\w*)(\s*)(\d{1,2})\b", "$3$2$1", "", 1)
If RegExMatch(str, "i)^\s*(?:(\d{4})([\s\-:\/])(\d{1,2})\2(\d{1,2}))?"
. "(?:\s*[T\s](\d{1,2})([\s\-:\/])(\d{1,2})(?:\6(\d{1,2})\s*(?:(Z)|(\+|\-)?"
. "(\d{1,2})\6(\d{1,2})(?:\6(\d{1,2}))?)?)?)?\s*$", i)
d3 := i1, d2 := i3, d1 := i4, t1 := i5, t2 := i7, t3 := i8
Else If !RegExMatch(str, "^\W*(\d{1,2}+)(\d{2})\W*$", t)
RegExMatch(str, "i)(\d{1,2})\s*:\s*(\d{1,2})(?:\s*(\d{1,2}))?(?:\s*([ap]m))?", t)
, RegExMatch(str, e2, d)
f = %A_FormatFloat%
SetFormat, Float, 02.0
d := (d3 ? (StrLen(d3) = 2 ? 20 : "") . d3 : A_YYYY)
. ((d2 := d2 + 0 ? d2 : (InStr(e2, SubStr(d2, 1, 3)) - 40) // 4 + 1.0) > 0
? d2 + 0.0 : A_MM). ((d1 += 0.0) ? d1 : A_DD) . t1
+ (t1 = 12 ? t4 = "am" ? -12.0 : 0.0 : t4 = "am" ? 0.0 : 12.0) . t2 + 0.0 . t3 + 0.0
SetFormat, Float, %f%
Return, d
}
/*
// Liste: der noch fehlenden Tage
;Buß-Bettag := Mittwoch vor 23.11
;Ulmer Schwörmontag (vorletzter Montag im Juli)
;Maimarktdienstag in Mannheim (10 Tage nach dem letzten Samstag im April)
;Volkstrauertag := 2 woche vor 1 Advent
;Ewigkeitssonntag := 1 woche vor 1 Advent
|
Benutzung:
liste:=Feiertage()
ergibt eine Liste der Feiertage des aktuellen Jahres mit nur daten, getrennt durch | (pipe). ein einfaches beispiel in source enthalten. eigentlich einfach
grüße
derRaphael _________________
|
|
| Nach oben |
|
 |
deti
Anmeldedatum: 13.02.2008 Beiträge: 24 Wohnort: CH
|
Verfasst am: Mo März 17, 2008 12:57 pm Titel: |
|
|
Coole Sache derRaphael!
So etwas habe ich gesucht!
Merci und eine schöne Woche |
|
| Nach oben |
|
 |
Thalon
Anmeldedatum: 25.10.2005 Beiträge: 1867 Wohnort: Österreich
|
Verfasst am: Mo März 17, 2008 6:09 pm Titel: |
|
|
Für Österreich kann mans eventuell auch per URLDownloadToFile von hier aus machen (kanns hier leider nicht testen). _________________ Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe |
|
| Nach oben |
|
 |
garry
Anmeldedatum: 25.10.2005 Beiträge: 395 Wohnort: switzerland
|
Verfasst am: Do März 20, 2008 11:32 pm Titel: |
|
|
hier ein Formel in gwbasic
| Code: | 100 '---- GWBASIC CALCULATION FOR EASTERN AND WEEKDAY ----------------------------------
112 Y$=RIGHT$(DATE$,4):Y%=VAL(Y$):Y=VAL(Y$)
220 PRINT "Easter Sunday in ";Y%
230 cent%= Y%\100+1:greg%= 3*cent%\4-12:gold% =Y% MOD 19+1:clav%=(8*cent% +5)\25-5-greg%
270 e% = 5 * Y% \ 4 - greg% - 10
280 moon% = (11*gold% +20+clav%) MOD 30
290 IF moon% = 25 AND gold% > 11 OR moon% = 24 THEN moon% = moon% +1
291 d% = 44-moon%
292 IF d% < 21 THEN d% = d% + 30
293 d% = d% +7-(d% + e%) MOD 7
294 IF d% > 31 THEN MO=4 else MO=3
295 IF d% > 31 THEN PRINT " April "; d% - 31 ELSE PRINT " March "; d%
320 A=Y:B=MO:C=D%
330 IF B-3>=0 THEN LET B=B+1:GOTO 340
335 B=13+B:A=A-1
340 N=INT(365.25*A)+INT(30.6*B)+C-621049
345 N=N-1:I=(N-INT(N/7)*7)+1
350 ON I GOTO 351,352,353,354,355,356,357
351 W=1:W$="Monday ":GOTO 360
352 W=2:W$="Tuesday ":GOTO 360
353 W=3:W$="Wednesday":GOTO 360
354 W=4:W$="Thursday ":GOTO 360
355 W=5:W$="Friday ":GOTO 360
356 W=6:W$="Saturday ":GOTO 360
357 W=7:W$="Sunday "
360 Print W$
390 PRINT:PRINT:PRINT "Push any key for quit"
400 A$=INKEY$:IF A$="" THEN 400
410 SYSTEM
|
|
|
| Nach oben |
|
 |
Milchmann
Anmeldedatum: 10.12.2007 Beiträge: 61
|
Verfasst am: Mo Apr 07, 2008 6:54 pm Titel: |
|
|
Hallo,
bezugnehmend auf die von derRaphael erstellten Feiertagsliste mal ein von mir erstelltes Skript zur Berechnung der Arbeitstage. Dazu wird eine Datei erstellt die im Verzeichnis c:\temp abgelegt wird. Existiert das Verzeichnis nicht, wird die Konfigseite immer wieder neu aufgerufen.
| Code: |
#NoTrayIcon
#SingleInstance
DetectHiddenWindows, On
SetTitleMatchMode 2
SetTitleMatchMode slow
SetFormat, Float, 02.0
programName = Arbeitstageberechnen
INIfile = %programName%2.txt
IfNotExist, c:\Temp\%INIfile%
{
Tag1 := "NeuJahr=01.01.Jahr"
Tag2 := "HlDreiKönige=06.01.Jahr"
Tag3 := "Rosenmontag=Ostersonntag-48"
Tag4 := "Faschingsdienstag=Ostersonntag-47"
Tag5 := "Aschermittwoch=Ostersonntag-46"
Tag6 := "Gründonnerstag=Ostersonntag-3"
Tag7 := "Karfreitag=Ostersonntag-2"
Tag8 := "Karsamstag=Ostersonntag-1"
Tag9 := "Ostermontag=Ostersonntag+1"
Tag10 := "ChristiHimmelfahrt=Ostersonntag+39"
Tag11 := "Pfingstsonntag=Ostersonntag+49"
Tag12 := "Pfingstmontag=Ostersonntag+50"
Tag13 := "FrankfurterWäldchestag=Ostersonntag+51"
Tag14 := "Fronleichnam=Ostersonntag+60"
Tag15 := "TagDerArbeit=01.05.Jahr"
Tag16 := "AugsburgerFriedensfest=08.08.Jahr"
Tag17 := "MariäHimmerfahrt=15.08.Jahr"
Tag18 := "TagDerDeutschenEinheit=03.10.Jahr"
Tag19 := "Reformationstag=31.10.Jahr"
Tag20 := "Allerheiligen=01.11.Jahr"
Tag21 := "BußUndBettag=Mittwoch vor 23.11.Bett"
Tag22 := "MariäEmpfängnis=08.12.Jahr"
Tag23 := "HeiligAbend=24.12.Jahr"
Tag24 := "ErsterWeihnachtstag=25.12."
Tag25 := "ZweiterWeihnachtstag=26.12.Jahr"
Tag26 := "Silvester=31.12.Jahr"
Tag27 := "Neuesjahr=01.01.neu"
Gui, Font, S7 Bold Underline, Verdana
Gui, Add, CheckBox, x26 y17 w140 h30 vTage1, Neues Jahr ( Sachsen )
GuiControl,, Tage1, 1
Gui, Add, CheckBox, x26 y57 w140 h30 vTage2, Heiligen Drei Könige
Gui, Add, CheckBox, x26 y97 w140 h30 vTage3, Rosenmontag
Gui, Add, CheckBox, x26 y137 w140 h30 vTage4, Faschingsdienstag
Gui, Add, CheckBox, x26 y177 w140 h30 vTage5, Aschermittwoch
Gui, Add, CheckBox, x26 y217 w140 h30 vTage6, Gründonnerstag
Gui, Add, CheckBox, x26 y257 w140 h30 vTage7, Karfreitag ( Sachsen )
GuiControl,, Tage7, 1
Gui, Add, CheckBox, x26 y297 w140 h30 vTage8, Karsamstag ( Sachsen )
GuiControl,, Tage8, 1
Gui, Add, CheckBox, x26 y337 w140 h30 vTage9, Ostermontag `n( Sachsen )
GuiControl,, Tage9, 1
Gui, Add, CheckBox, x186 y17 w140 h30 vTage10, Christi Himmelfahrt `n( Sachsen )
GuiControl,, Tage10, 1
Gui, Add, CheckBox, x186 y57 w140 h30 vTage11, Pfingstsonntag `n( Sachsen )
GuiControl,, Tage11, 1
Gui, Add, CheckBox, x186 y97 w140 h30 vTage12, Pfingstmontag `n( Sachsen )
GuiControl,, Tage12, 1
Gui, Add, CheckBox, x186 y137 w140 h30 vTage13, Frankfurter Wäldchestag
Gui, Add, CheckBox, x186 y177 w140 h40 vTage14, Fronleichnam ( nur Bautzen und Kamenz in Sachsen )
Gui, Add, CheckBox, x186 y217 w140 h30 vTage15, Tag der Arbeit `n( Sachsen )
GuiControl,, Tage15, 1
Gui, Add, CheckBox, x186 y257 w140 h30 vTage16, Augsburger Friedensfest
Gui, Add, CheckBox, x186 y297 w140 h30 vTage17, Mariä Himmelfahrt
Gui, Add, CheckBox, x186 y337 w140 h30 vTage18, Tag Der Deutschen Einheit ( Sachsen )
GuiControl,, Tage18, 1
Gui, Add, CheckBox, x346 y17 w140 h30 vTage19, Reformationstag `n( Sachsen )
GuiControl,, Tage19, 1
Gui, Add, CheckBox, x346 y57 w140 h30 vTage20, Allerheiligen
Gui, Add, CheckBox, x346 y97 w140 h30 vTage21, Buß- und Bettag `n( Sachsen )
GuiControl,, Tage21, 1
Gui, Add, CheckBox, x346 y137 w140 h30 vTage22, Mariä Empfängnis
Gui, Add, CheckBox, x346 y177 w140 h30 vTage23, Heilig Abend `n( Sachsen )
GuiControl,, Tage23, 1
Gui, Add, CheckBox, x346 y217 w140 h30 vTage24, Erster Weihnachtstag `n( Sachsen )
GuiControl,, Tage24, 1
Gui, Add, CheckBox, x346 y257 w140 h30 vTage25, Zweiter Weihnachtstag ( Sachsen )
GuiControl,, Tage25, 1
Gui, Add, CheckBox, x346 y297 w140 h30 vTage26, Silvester ( Sachsen )
GuiControl,, Tage26, 1
Gui, Add, CheckBox, x346 y337 w140 h30 vTage27, Neues Jahr (Folgejahr) ( Sachsen )
GuiControl,, Tage27, 1
Gui, Color, EEEEEE
Gui, Add, Button, x206 y387 w100 h30 gLos, Start
; Generated using SmartGUI Creator 4.0
Gui, Show, x453 y163 h420 w516, Feiertage neu eintragen
Return
Los:
Gui, Submit, destroy
Loop, 27
if (Tage%a_index% = 1)
{
FileAppend, % Tag%a_index% "`,", c:\Temp\%INIfile%
}
reload
return
}
Fileread, Tagefeier, c:\Temp\%INIfile%
Tagefeier := RegExReplace(Tagefeier, ",$", "")
; FeierTage erstellt von derRaphael ( Quelle: http://de.autohotkey.com/forum/viewtopic.php?t=2563 )
FeierTage(_Jahr="",Art="",Delimiter="|")
{
global
_Jahr := (_Jahr) ? _Jahr : A_YYYY
FeiertagListe := Tagefeier
;Ostersonntagberechnung: (Quelle: http://de.wikipedia.org/wiki/Osterdatum)
g := mod(_Jahr,19), c := _Jahr//100
h := mod((c-(c//4)-((8*c+13)//25)+19*g+15),30)
i := h-(h//28)*(1-(29//(h+1))*((21-G)//11))
j := mod((_Jahr+(_Jahr//4)+i+2-c+(c//4)),7)
l := i-j
oMonat := 3 + ((l+40)//44), OSonntag := l + 28 - 31 * (oMonat//4)
oDate := ((StrLen(oSonntag)<2) ? "0":"") oSonntag ".0" oMonat "." _Jahr " 00:00AM"
OsterSonntag := DateParse(oDate)
;Feiertage
out := ""
Loop, Parse, FeiertagListe,`,
{
StringSplit, t, A_LoopField, =
if RegExMatch(t2,"[-+]")
{
mod := (InStr(t2,"-")) ? 1 : 0, d := RegExReplace(t2,"[^\d]+?")
srcVar := RegExReplace(t2,"i)[^a-zßöäü]+")
srcValue := %srcVar%, dayMod := (mod) ? d * (-1) : d
EnvAdd, srcValue, %dayMod%, days
} else if RegExMatch(t2,"i)Jahr") {
srcValue := RegExReplace(t2,"i)Jahr",_Jahr) " 00:00AM"
srcValue := DateParse(srcValue)
} else if RegExMatch(t2,"i)neu") {
_Jahrneu := _Jahr +1
srcValue := RegExReplace(t2,"i)neu",_Jahrneu) " 00:00AM"
srcValue := DateParse(srcValue)
} else if RegExMatch(t2,"i)vor") or RegExMatch(t2,"i)nach") {
if RegExMatch(t2,"i)vor")
mod := -1
else
mod := 1
StringSplit,w,t2,%A_Space%
Tage = "Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag"
Loop,Parse,Tage,`,
if (w1=A_LoopField)
TagIndex := A_Index
srcValue := RegExReplace(w3,"i)Bett",_Jahr) " 00:00AM"
srcValue := DateParse(srcValue)
FormatTime, TagDerWoche , %srcValue%, WDay
tage := ((TagDerWoche>TagIndex) ? TagDerWoche-TagIndex : (TagDerWoche+(7-TagIndex))) * mod
EnvAdd, srcValue, tage, days
} else {
srcValue := t2
}
out .= ((Art="Komplett") ? t1 ": " : "") srcValue Delimiter
}
Return SubStr(out,1,-1)
}
DateParse(str) { ;v 1.04
; Titans DayParse: http://www.autohotkey.net/~Titan/#dateparse
; Discussion: http://www.autohotkey.com/forum/topic20405.html
; Thx, Titan
static e2 = "i)(?:(\d{1,2}+)[\s\.\-\/,]+)?(\d{1,2}|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\w*)[\s\.\-\/,]+(\d{2,4})"
str := RegExReplace(str, "((?:" . SubStr(e2, 42, 47) . ")\w*)(\s*)(\d{1,2})\b", "$3$2$1", "", 1)
If RegExMatch(str, "i)^\s*(?:(\d{4})([\s\-:\/])(\d{1,2})\2(\d{1,2}))?"
. "(?:\s*[T\s](\d{1,2})([\s\-:\/])(\d{1,2})(?:\6(\d{1,2})\s*(?:(Z)|(\+|\-)?"
. "(\d{1,2})\6(\d{1,2})(?:\6(\d{1,2}))?)?)?)?\s*$", i)
d3 := i1, d2 := i3, d1 := i4, t1 := i5, t2 := i7, t3 := i8
Else If !RegExMatch(str, "^\W*(\d{1,2}+)(\d{2})\W*$", t)
RegExMatch(str, "i)(\d{1,2})\s*:\s*(\d{1,2})(?:\s*(\d{1,2}))?(?:\s*([ap]m))?", t)
, RegExMatch(str, e2, d)
f = %A_FormatFloat%
SetFormat, Float, 02.0
d := (d3 ? (StrLen(d3) = 2 ? 20 : "") . d3 : A_YYYY)
. ((d2 := d2 + 0 ? d2 : (InStr(e2, SubStr(d2, 1, 3)) - 40) // 4 + 1.0) > 0
? d2 + 0.0 : A_MM). ((d1 += 0.0) ? d1 : A_DD) . t1
+ (t1 = 12 ? t4 = "am" ? -12.0 : 0.0 : t4 = "am" ? 0.0 : 12.0) . t2 + 0.0 . t3 + 0.0
SetFormat, Float, %f%
Return, d
}
Gui, Add, DateTime, x75 y137 w90 h20 vDatum,
Gui, Add, Edit, x75 y77 w90 h20 vAT +Center, 40
Gui, Add, Text, x39 y17 w180 h50 +Center cBlue, Bitte Anzahl der gewünschten Arbeitstage angeben
Gui, Add, Text, x55 y107 w130 h20 +Center cBlue, Bitte Startdatum eingeben
Gui, Add, Button, x96 y167 w50 h40 gStart, Start
Gui, Add, Text, x266 y17 w180 h50 +Center cBlue, Bitte Startdatum angeben `n`r
Gui, Add, Text, x296 y107 w130 h20 +Center cBlue, Bitte Endedatum eingeben
Gui, Add, DateTime, x316 y137 w90 h20 vDatumEnde,
Gui, Add, Button, x336 y167 w50 h40 gstart1, Start
Gui, Add, DateTime, x316 y77 w90 h20 vDatumStart,
Gui, Add, Button, x566 y167 w50 h40 gStart2, Start
Gui, Add, DateTime, x546 y77 w90 h20 vKalendertage,
Gui, Add, Edit, x546 y137 w90 h20 vZaehler +Center, 40
Gui, Add, Text, x516 y107 w160 h30 cBlue, Tage ( "-" vor Zahl setzen um Rückwärts zu rechnen )
Gui, Add, Text, x516 y17 w160 h40 +Center cBlue s12, Bitte Startdatum eingeben, um Kalendertage zu berechnen
Gui, Add, Button, x6 y247 w80 h30 glöschen, und Los
Gui, Add, Text, x96 y257 w140 h20 +Center cred s12, Feiertage neu bestimmen !!
; Generated using SmartGUI Creator 4.0
Gui, Color, EEEEEE
gui, font, s26, w300, Arial
Gui +OwnDialogs
Gui +Border
Gui +AlwaysOnTop
Gui, Show, x426 y118 h280 w704, Arbeitstage berechnen
Return
GuiClose:
ExitApp
Return
löschen:
FileDelete, c:\Temp\%INIfile%
reload
return
Start2:
Gui, Submit,nohide
Kalendertageorg := Kalendertage
FormatTime, Kalendertageorg, %Kalendertageorg%, LongDate
Kalendertage += Zaehler, days
FormatTime, Kalendertage, %Kalendertage%, longdate
msgbox, 4672, Kalendertage berechnen, Das Datum abzüglich/zuzüglich %Zaehler% Tage vom %Kalendertageorg% an gerechnet, ist `n`r`n`r %Kalendertage%
return
Start1:
Gui, Submit,nohide
AT := 0
; aufsplitten Ende und startdatum in Stellen 1 - 8
StringMid, DatumEnde, DatumEnde, 1, 8
StringMid, DatumStart, DatumStart, 1, 8
; aufsplitten Monat Tag Jahr
StringMid, Jahr, DatumStart, 1, 4
StringMid, Monat, DatumStart, 5, 2
StringMid, Tag, DatumStart, 7, 2
TageBeginn := DatumStart
TageEnde := DatumEnde
; wenn Startdatum niedriger als Endedatum
EnvSub, TageEnde, TageBeginn, days
if TageEnde <= 0
{
msgbox, 4656, Arbeitstage berechnen, Endedatum muss größer als Startdatum sein.
exit
}
FormatTime, Endedatumtag, %datumende%, wday
Tag := Tag
Monat := Monat
Jahr := Jahr
Monat += 0.0
Tag += 0.0
cdate1 := Jahr Monat Tag
FormatTime, dno1, %cdate1%, YDay0
Starttag := dno1
Loop,
{
Ergebnis := dno1 -Starttag
var1 := cdate1
var1 += %Ergebnis%, days
FormatTime, Bert, %var1%, yyyyMMdd
if (Bert >= DatumEnde) ; wenn das Loop-Datum größer als das Ende-Datum ist
{
if % Endedatumtag ="1" or Endedatumtag ="7"
{
Endergebnis -= 1
msgbox, 4672, Arbeitstage berechnen, %Endergebnis% Arbeitstag(e) bei %Tageende% Kalendertagen. `n`r`n`r Fällt das Endedatum auf einen Feiertag oder ein Wochenende`n`rwird bis zum letzten Arbeitstag vor dem Wochenende oder Feiertag gerechnet.
break
}
ifinstring, liste, %DatumEnde%
{
Endergebnis -= 1
msgbox, 4672, Arbeitstage berechnen, %Endergebnis% Arbeitstag(e) bei %Tageende% Kalendertagen. `n`r`n`r Fällt das Endedatum auf einen Feiertag oder ein Wochenende`n`rwird bis zum letzten Arbeitstag vor dem Wochenende oder Feiertag gerechnet.
break
}
msgbox, 4672, Arbeitstage berechnen, %Endergebnis% Arbeitstag(e) bei %Tageende% Kalendertagen. `n`r`n`r Fällt das Endedatum auf einen Feiertag oder ein Wochenende`n`rwird bis zum letzten Arbeitstag vor dem Wochenende oder Feiertag gerechnet.
break
}
else ; so lange Loop bis oben genannter Fall eintritt
{
AT := 1
gosub, Berechnung
Endergebnis := a_index
}
}
return
Start:
Gui, Submit,nohide
StringMid, Jahr, Datum, 1, 4
StringMid, Monat, Datum, 5, 2
StringMid, Tag, Datum, 7, 2
Tag := Tag
Monat := Monat
Jahr := Jahr
Monat += 0.0
Tag += 0.0
cdate1 := Jahr Monat Tag
FormatTime, dno1, %cdate1%, YDay0
Starttag := dno1
gosub, Berechnung
Ergebnis := dno1 -Starttag
var1 := cdate1
var1 += %Ergebnis%, days
FormatTime, Bert, %var1%, longdate
msgbox, 4672, Arbeitstage berechnen, %Bert%
return
Berechnung:
loop, %AT%
{
dno1 += 1
jetzt := dno1-Starttag
var1 := cdate1
var1 += %jetzt%, days
StringMid, var1, var1, 1, 8
StringMid, aktuellesJahr, var1, 1, 4
liste:=Feiertage(aktuellesJahr)
loop,
{
ifinstring, liste, %var1%
{
dno1 += 1
jetzt := dno1-Starttag
var1 := cdate1
var1 += %jetzt%, days
StringMid, var1, var1, 1, 8
}
else
{
break
}
}
FormatTime, tage, %var1%, wday
if % tage="7"
{
dno1 += 2
}
else
if % tage="1"
{
dno1 += 1
}
jetzt := dno1-Starttag
var1 := cdate1
var1 += %jetzt%, days
StringMid, var1, var1, 1, 8
StringMid, aktuellesJahr, var1, 1, 4
liste:=Feiertage(aktuellesJahr)
loop,
{
ifinstring, liste, %var1%
{
dno1 += 1
jetzt := dno1-Starttag
var1 := cdate1
var1 += %jetzt%, days
StringMid, aktuellesJahr, var1, 1, 8
FormatTime, tage, %var1%, wday
{
if % tage="7"
{
dno1 += 2
}
else
if % tage="1"
{
dno1 += 1
jetzt := dno1-Starttag
var1 := cdate1
var1 += %jetzt%, days
StringMid, aktuellesJahr, var1, 1, 8
FormatTime, tage, %var1%, wday
}
}
}
else
{
break
}
}
}
return
|
Es ist optisch nicht der hammer erfüllt aber voll seinen Zweck.
Bert |
|
| Nach oben |
|
 |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|