Italia
Foro

Kalender-/Datumsberechnung

 

Langer
Hallo zusammen,

ich suche nach einem Weg aus der Summe der Tage zwischen zwei Datumswerten die Wochenenden raus zu rechnen.
z.B. Urlaubsberechnung
von Dienstag den 4.4.2017 bis Dienstag den 11.4.2017 sind incl. 4. und 11. 8 Tage. Urlaubstage aber nur 6 da das Wochenende eh frei ist.
Irgendwie will es mir nicht gelinge hierfür eine passende Formel zu erdenken.
Hat jemand schon einmal so eine Berechnung angestellt?

Dirk
 
03.04.2017  
 




p.specht

Gültigkeitszeitraum Gregorianischer Kalender? Oder sufficiente unser Jahrhundert? Welche XProfan-Version (ab X2 gibt es komfortable Funktionen zur Wochentagsberechnung + die Hilfsfunktion dow() Day of Week)

Für ältere Profanversionen wie 11.2a wäre das nachstehende Proc vielleicht ganz brauchbar.
Gruss
WindowTitle "Direkte Wochentagsermittlung aus Datum"
' Version 1.02_beta, ohne jede Gewähr oder Garantie
declare da$,dy%,mnth%,fyear%,syear%,kal$,i%,j%,h%,greg%
Window 424,300
nochmal:
cls rgb(0,100,255)
print
print " Algorithmus " + chr$(34) + "Zeller´s Kongruenz" + chr$(34) + "                  "
print " Quelle: Pfarrer Dr.math. Christian Zeller A.D.1882 "
print
print " Datum [dd.mm.yyyy] = ";
locate 5,24 : input da$
case da$="" : end
dy%=val(left$(da$,2))
mnth%=val(mid$(da$,4,2))
fyear%=val(mid$(da$,7,4))
syear%=val(mid$(da$,9,2))
print
print

if fyear% > 1582 : greg%=1

elseif fyear% < 1582 : greg%=0

elseif fyear% = 1582

    if mnth%>10 : greg%=1

    elseif mnth%<10 : greg%=0

    elseif mnth%=10

        if dy%>=15 : greg%=1

        elseif dy%<=4 : greg%=0

        else

            greg%=-1

        endif

    endif

endif

kal$=" Julianischer Kalender 45vChr-4.10.1582  "
case greg%=1 : kal$=" Gregorianischer Kalender              "
case greg%=-1: kal$=" KEIN KALENDER ZUFREFFEND!             "
Print kal$
Print " Der " + str$(dy%)+"."+str$(mnth%)+"."+str$(fyear%)+" fällt auf einen ";

if mnth%<3

    mnth%=mnth%+12
    fyear% = fyear%-1
    syear% = syear%-1

endif

h%=-1

if greg%=1

    h%=(dy%+int((mnth%+1)*26/10)+syear%+int(syear%/4)+int( int(fyear%/100) /4) + 5*int(fyear%/100) ) mod 7

elseif greg%=0

    h%=(dy%+int((mnth%+1)*26/10)+syear%+int(syear%/4)+ 5 + 6* int(fyear%/100) ) mod 7

else

    h%=99

endif

if h%=0 : print "Samstag";

elseif h%=1 : print "Sonntag";

elseif h%=2 : print "Montag";

elseif h%=3 : print "Dienstag";

elseif h%=4 : print "Mittwoch";

elseif h%=5 : print "Donnerstag";

elseif h%=6 : print "Freitag";

elseif h%=99: print "        "

    print " nicht existierenden Zeitraum (wegen   "
    print " grego. Kalenderreform ausgelassen)";
    else : print " fehlerhaften Eingabewert";

endif

print ".   "
WaitInput
Goto "nochmal"

Im Prinzip ist nämlich ohnehin Einzeltagsbetrachtung angesagt, wegen der unregelmäßigen Feiertage, die auch noch bundesländerweise verschieden ist. Empfehlenswert: "Kastner: Terminplanung mit Basic auf Commodore" (aniquarisch vielleicht?)
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
04.04.2017  
 




Langer
Hallo p.specht, danke per deinen Post. Das war noch nicht das was ich eigentlich meinte.

Mir ist inzwischen die passende Idee gekommen.
Declare hWin1&, hButton1&, Ende&, hDate1&, hWin2&, hButton2&, hDate2&, Date&, Tage%, A&, b%
hWin1& = @Create("Dialog", %hWnd, "1. Urlaubstag", 100, 100, 200, 200)
hDate1& = @Create("DateEdit", hWin1&, "", 10, 50, 100, 24)
hWin2& = @Create("Dialog", %hWnd, "letzter Urlaubstag", 350, 100, 200, 200)
hButton2& = @Create("Button", hWin2&, "Ende", 10, 90, 180, 24)
hDate2& = @Create("DateEdit", hWin2&, "", 10, 50, 100, 24)
Clear Ende&

WhileNot Ende&

    WaitInput

    If @GetFocus(hButton2&)

        Ende& = 1

    EndIf

EndWhile

Def @Date(1) dt("setDate",val(substr$(substr$(@$(1),1," "),-1,".")), val(substr$(substr$(@$(1),1," "),2,".")), val(substr$(substr$(@$(1),1," "),1,".")))
Def @DateDiff(2) dt("DateTimeStr", "dd.mm.yyyy", Date(@$(1))-Date(@$(2)))
Def @DaysBetween(2) val(abs(30-val(substr$(substr$(DateDiff(@$(1),@$(2)),1,"|"),1,"."))))
Var Zeit1$=@GetText$(hDate1&)
Var Zeit2$=@GetText$(hDate2&)
Var d! = dt("SetDate",@GetText$(hDate1&))
Var wtag& = dt("getDoW",d!)
Declare wochentag$
Case wtag& = 1 : wochentag$ = "Montag"
Case wtag& = 2 : wochentag$ = "Dienstag"
Case wtag& = 3 : wochentag$ = "Mittwoch"
Case wtag& = 4 : wochentag$ = "Donnerstag"
Case wtag& = 5 : wochentag$ = "Freitag"
Case wtag& = 6 : wochentag$ = "Samstag"
Case wtag& = 7 : wochentag$ = "Sonntag"
b% = DaysBetween(Zeit1$, Zeit2$)
Tage% = b% + wtag&
Case Tage% < 7 : A& = 0
Case Tage% > 7 : A& = 2
Case Tage% > 14 : A& = 4
Case Tage% > 21 : A& = 6
Case Tage% > 28 : A& = 8
Date& = (DaysBetween(Zeit1$, Zeit2$) + 1) - A&
print Zeit1$
print Zeit2$
print
print DaysBetween(Zeit1$, Zeit2$) + 1;" Tag(e)"
print
print "der erste Tag ist ein " + wochentag$
print
print "das entspricht ";Date&;"Tagen Urlaub"
A& = 0
waitInput

fehlt jetzt noch die Feiertagsüberprüfung, aber da hab ich auch schon eine Idee. Muß ich aber erst testen.
 
04.04.2017  
 




p.specht

Superstens!
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
04.04.2017  
 




ByteAttack
Ich kann es nur dir sagen wie man es durch Excel machen kann.... [...] 

Und per Daten benutze ich die MWDATE.DLL
 
Website:  [...] 
Facebook:  [...] 
05.04.2017  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

6.400 Views

Untitledvor 0 min.
Langer05.12.2021
Member 288304905.02.2019
p.specht30.09.2018
Magda02.06.2018
Di più...

Themeninformationen

Dieses Thema hat 3 subscriber:

Langer (2x)
p.specht (2x)
ByteAttack (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie