Deutsches AutoHotkey Homepage AutoHotkey Community
Wir helfen uns gegenseitig aus der Patsche
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Feiertagsberechnung 0.1

 
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DerRaphael



Anmeldedatum: 09.01.2008
Beiträge: 825
Wohnort: Zuhause

BeitragVerfasst am: So Feb 17, 2008 10:45 pm    Titel: Feiertagsberechnung 0.1 Antworten mit Zitat

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 Smile

grüße
derRaphael
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
deti



Anmeldedatum: 13.02.2008
Beiträge: 24
Wohnort: CH

BeitragVerfasst am: Mo März 17, 2008 12:57 pm    Titel: Antworten mit Zitat

Coole Sache derRaphael!
So etwas habe ich gesucht! Very Happy
Merci und eine schöne Woche
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thalon



Anmeldedatum: 25.10.2005
Beiträge: 1867
Wohnort: Österreich

BeitragVerfasst am: Mo März 17, 2008 6:09 pm    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
garry



Anmeldedatum: 25.10.2005
Beiträge: 395
Wohnort: switzerland

BeitragVerfasst am: Do März 20, 2008 11:32 pm    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Milchmann



Anmeldedatum: 10.12.2007
Beiträge: 61

BeitragVerfasst am: Mo Apr 07, 2008 6:54 pm    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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