Italia
Fonte/ Codesnippets

Datum Letzter Monat Php Wochentag

 
Manchmal necessario man das Datum des letzten Wochentages eines Monats
abzüglich Wochenende und ich glaube da eine "coole" Lösung per zu haben:
KompilierenMarkierenSeparieren
//PHP:
;echo date_lwdom(time())

;function date_lwdom($time){//last working day of month

    ;$a=explode(".",date_ldom($time,"N.j"))
    ;return ($a[0]>5?$a[1]-$a[0]+5:$a[1])

;}

;function date_ldom($time,$format="j") {//last day of month

    ;return date($format,strtotime("-1 second",strtotime("+1 month",strtotime(date("m",$time)."/01/".date("Y",$time)."00:00:00"))))

;}


Dies ist unbeachtet der Feiertage quasi der letzte Arbeitstag eines Monats wenn
man das darauf folgende Wochenende nicht "arbeiten" muss.

Vlt. hat dafür auch jemand eine xprofansche Lösung.
 
25.05.2012  
 




Thomas
Freier
Kurz zusammen kopiert aus der XProfan 10ner Zeit. Benötigte den 3.Werktag nach Dateierstellung. Ob es eine elegantere Berechnung der beweglichen Feiertage gibt???
KompilierenMarkierenSeparieren
Def IsLeapYear(1) If( %(1) MOD 4 = 0 ,  %(1) MOD 100 <> 0, %(1) MOD 400 = 0 & 1 | 0 )
cls
Usefont "MS Sans Serif",10,0,0,0,0
SetDialogFont 1
DrawText 10,60,"allg. Feiertage"
var FeiertageLV%=CreateListBox(%hwnd,1,10,90,150,200)
var Datum$="02.02.2012"
FEIERTAGE Datum$
WERKTAG Datum$
waitinput
end

Proc WERKTAG

    Parameters _Datum$
    Declare _t%, _m%, _j%, _wtk%, _wtc%
    _m%=val(substr$(_Datum$,2,"."))
    _j%=val(substr$(_Datum$,3,"."))
    case InStr(substr$(_Datum$,2,"."),"01030507081012") : _t%=31
    case InStr(substr$(_Datum$,2,"."),"0406091011") : _t%=30
    case substr$(_Datum$,2,".") = "02" : _t%=28 + IsLeapYear(val(substr$(_Datum$,3,".")))' Schaltjahr?
    ' 0= Sonntag

    Whileloop 7

        _wtk% = int(0.6+1/_m%)
        _wtc%=int(13*(_m%+12*_wtk%+1)/5)+int(5*(_j%-_wtk%)/4)-int((_j%-_wtk%)/100)+int((_j%-_wtk%)/400)-(7*int((int(13*(_m%+12*_wtk%+1)/5)+int(5*(_j%-_wtk%)/4)-int((_j%-_wtk%)/100)+int((_j%-_wtk%)/400)+_t%-1)/7))+_t%-1

        If (_wtc% <> 0) AND  (_wtc% < 6)

            ' Feiertag?

            If @SelectString(FeiertageLV%,-1,str$(_j%)+"."+Format$("00",_m%)+"."+Format$("00",_t%))=-1

                print "letzer Werktag im " + substr$(_Datum$,2,".")+". Monat des Jahres "+substr$(_Datum$,3,".") + \
                " ist der: " + @Format$("00",_t%)
                BREAK

            EndIf

        EndIf

        dec _t%

    EndWhile

EndProc

Proc FEIERTAGE

    Parameters _Datum$
    var _j%=val(substr$(_Datum$,3,"."))
    AddString(FeiertageLV%,str$(_j%)+".01.01")
    AddString(FeiertageLV%,str$(_j%)+".05.01")
    AddString(FeiertageLV%,str$(_j%)+".10.03")
    Declare osterzahl%
    ' Berechnet den Ostersonntag
    Declare a%,b%,c%,d%,e%,f%,g%,h%,h1%,h2%,i%
    Declare k%,l%,L1%,L2%,m%,m1%,m2%,n%,n1%,n2%,p%
    Declare kartag%,karmonat%,ostermontag%,ostermonat%
    a%=_j% Mod 19
    b%=_j%/100
    c%=_j% Mod 100
    d%=b%/4
    e%=b% Mod 4
    f%=(b%+8)/25
    g%= b% + f%
    Inc g%
    g%=g%/3
    h1%=19*a%
    h2%=b%-d%
    dec h2%,g%
    inc h2%,15
    h%=h1%+h2%
    h%=h% Mod 30
    i%=c%/4
    k%=c% Mod 4
    L1%=2*e%
    inc L1%,32
    L2%=2*i%
    inc L1%,L2%
    L2%=h%+k%
    l%=L1%-L2%
    l%=l% Mod 7
    m1%=11 * h%
    m2%=22+l%
    m%=a%+m1%
    inc m%,m2%
    m%=m%/451
    n1%=7*m%
    n%=h%+l%
    dec n%,n1%
    n2%=n%+114
    n%=n2%/31' n% ist der Monat des Osterdatums
    p%=n2% Mod 31
    Inc p%' p% ist der Tag des Osterdatums
    '   Karfreitag
    kartag%=p%-2
    karmonat%=n%

    If p%=1

        kartag%=30
        karmonat%=3

    ElseIf p%=2

        kartag%=31
        karmonat%=3

    EndIf

    AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",karmonat%)+"."+Format$("00",kartag%))
    '   Ostersonntag"
    AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",n%)+"."+Format$("00",p%))
    '   Ostermontag ***

    If p%=31

        ostermontag%=1
        ostermonat%=4

    Else

        ostermontag%=p%+1
        ostermonat%=n%

    EndIf

    AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",ostermonat%)+"."+Format$("00",ostermontag%))
    ' Berechnung osterabhängiger Feiertage
    osterzahl%=59+p%
    Case n%=4: osterzahl%=osterzahl%+31
    Declare hi%,himon%,pfi%,pfimonat%,pfimo%,frolei%,fromon%,muta%
    ' Himmelfahrt
    hi%=osterzahl%+39

    If hi%>151

        himon%=6
        hi%=hi%-151

    Else

        himon%=5
        hi%=hi%-120

    EndIf

    AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",himon%)+"."+Format$("00",hi%))
    '   Pfingsten
    pfi%=osterzahl%+49

    If pfi%>151

        pfimonat%=6
        pfi%=pfi%-151

    Else

        pfimonat%=5
        pfi%=pfi%-120

    EndIf

    AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",pfimonat%)+"."+Format$("00",pfi%))
    '   Pfingstmontag ***

    If pfi%>31

        pfimo%=1
        pfimonat%=6

    Else

        pfimo%=pfi%+1

    EndIf

    AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",pfimonat%)+"."+Format$("00",pfimo%))
    AddString(FeiertageLV%,str$(_j%)+".12.25")
    AddString(FeiertageLV%,str$(_j%)+".12.26")
    ' wenn Heiligabend nicht als Werktag angesehen wird, als Feiertag eintragen
    '   AddString(FeiertageLV%,str$(_ja%)+".12.24")
    ' wenn Silvester nicht als Werktag angesehen wird, a
ertag eintragen ' AddString(FeiertageLV%,str$(_j%)+".12.31") EndProc
 
Gruß Thomas
Windows XP SP2, XProfan X2
26.05.2012  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

12.678 Views

Untitledvor 0 min.
Peter Max Müller15.01.2024
ecki10.02.2023
p.specht21.11.2021
R.Schneider20.11.2021
Di più...

Themeninformationen

Dieses Thema hat 2 subscriber:

iF (1x)
Thomas Freier (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