cAFD1 ;Datumfuncties ;%AFD1 ; [ 01/03/01 5:04 PM ] ; T0 ;Datumfuncties ; ; T0F ;Fonctions avec dates ; ; T0E ;Date functions ; ; DC(R) ; datum conversie I R?2N1"."2N1"."2N S R=$E(R,7,8)<50+19_$E(R,7,8)_$E(R,4,5)_$E(R,1,2) Q R ; DCO(R) ; datum conversie omgekeerd (jj)jjmmdd -> dd.mm.jj S R=$E(R,$L(R)-1,$L(R))_"."_$E(R,$L(R)-3,$L(R)-2)_"."_$E(R,$L(R)-5,$L(R)-4) Q R ; DELAY(R,SEC) ; telt bij huidige tijd R seconden bij en geeft deze tijd terug als uu:mm N HH,TIME S HH=$P($H,",")_","_($P($H,",",2)+R) I $P(HH,",",2)>86400 S $P(HH,",")=$P(HH,",")+1,$P(HH,",",2)=$P(HH,",",2)-86400 S TIME=$$HT^cAFA1(HH),TIME=$TR(TIME," ","") I $G(SEC) S TIME=TIME_":00" DELAYZ Q TIME ; DH(R) ;bepaalde datum omvormen tot $H-VORM N R0,R1,R2,R3,X,D S D="\" S R0=$P(R,".",2),R1=$P(R,".",3),R1=R1<50+19_R1-1841,R2=R1\4*1461,R3=R1#4*365,R=R2+R3+$P(R,".",1)+(R3>730&(R0>2))-1 F X=1:1:R0-1 S R=R+$P("31\28\31\30\31\30\31\31\30\31\30",D,X) Q R ; DJ(R) ; nummer dag binnen 1 jaar I '$L($G(R)) S R=$$HD^cAFD1($H) I R'?2N1"."2N1"."2N,R'?2N1"."2N1"."4N S R=$$HD^cAFD1(R) S R=$$DH^cAFD1(R)-$$DH^cAFD1("01.01."_$P(R,".",3))+1 Q R ; DW(R) ; bereken Julian week N (R) I '$L(R) S W="" G DWZ I R'?2N1"."2N1"."2N S R=$$HD(R) S RJ=$E($$DC(R),1,4) S JD=$$JD(R) ; Berekenen Julian date s d4=(JD+31741-(JD#7))#146097#36524#1461 s L=d4\1460 s d1=((d4-L)#365)+L S W=d1\7+1 I +$E(R,4,5)=1,W>50 S RJ=RJ-1 I +$E(R,4,5)=12,W=1 S RJ=RJ+1 S W=RJ_"."_$TR($J(W,2)," ",0) DWZ Q W ; DOW(DAT) ; bepalen dag van de week ; Maandag = 1 N R I DAT?2N1"."2N1"."2N S DAT=$$DH^cAFD1(DAT) S R=$TR(DAT#7,"4560123","1234567") Q R ; HD(K) ; $H naar DD.MM.JJ N R I $ZV["MSM" S R=$TR($ZD(+K,3),"/",".") I $ZV'["MSM" S R=$TR($ZD(+K,4),"/",".") I $L(R)=10 S R=$E(R,1,6)_$E(R,9,10) Q R ; JD(R) ; bereken Julian date N (R) I '$L(R) S JD="" G JDZ I R'?2N1"."2N1"."2N S R=$$HD(R) s RD=$$DC^cAFD1(R),RJ=$E(RD,1,4),RM=$E(RD,5,6),RD=$E(RD,7,8) s a=14-RM\12 s y=RJ+4800-a s m=RM+(12*a)-3 s JD=RD+((153*m+2)\5)+(365*y)+(y\4)-32083-13 JDZ Q JD ; LDM(RJ,RM) ; laatste dag van de maand ; RM = maand ; RJ = Jaar N D S D="\" S R="R="_$P("31\$$LEAP^cAFD1(RJ)+28\31\30\31\30\31\31\30\31\30\31",D,RM),@R LDMZ Q R ; LEAP(JR) ; is het jaar een schrikkeljaar ; uitgang : 1 = ja I JR'?4N S JR=JR<50+19*100+JR Q ((JR#400=0)!((JR#4=0)&'(JR#100=0))) ; HT(K,S) ; $H naar UU:MM N R,RU,RM,RS S R=$P(K,",",2),RU=R\3600,RM=R-(RU*3600)\60,RS=R-(RU*3600)-(RM*60) S R=$J(RU,2)_":"_$E(100+RM,2,3) I $G(S) S R=R_":"_$E(100+RS,2,3) Q R ; PAST(DAT,TERUG) ;Berekenen datum in het verleden ;%A104 ; [ 04/19/00 3:08 PM ] ; ; DATUM : ; xD : x dagen ; xM : x maanden ; xW : x weken ; xMBM : x maanden terug keren vanaf begin van de maand ; xWBW : x weken terug keren vanaf begin van de week (bv huidige situatie : 1WBW = steeds vanaf de maandag van de vorige week ; S $ZT="TRAP^cAN000" N RD,RM,RJ,R,DAG,i S R=DAT G PASTZ:'+TERUG S RD=$P(DAT,"."),RM=$P(DAT,".",2),RJ=$P(DAT,".",3) ; xD PASTA I TERUG?1.N1"D" S R=$$DATE(DAT,-TERUG) G PASTZ ; xM PASTB I TERUG?1.N1"M"!(TERUG?1.N1"MBM") D G PASTZ . F i=1:1:+TERUG S RM=RM-1 S:RM<1 RM=12,RJ=RJ-1 ; aantal maanden terug rekenen . S R=$$LDM(RJ,RM) I RD>R S RD=R . S R=$TR($J(RD,2)," ",0)_"."_$TR($J(RM,2)," ",0)_"."_$TR($J(RJ,2)," ",0) . I TERUG?1.N1"MBM" S R="01"_$E(R,3,8) ; xW PASTC I TERUG?1.N1"W" S R=$$DATE(DAT,-7*TERUG) G PASTZ ; xWBW PASTD I TERUG?1.N1"WBW" D G PASTZ . S DAT=$$DATE(DAT,-7*TERUG) . S DAG=$$DOW(DAT) ; dag van de week bepalen . I DAG>1 S DAT=$$DATE(DAT,-(DAG-1)) . S R=DAT PASTZ Q R ; DATE(DAT,AD) ; Aantal dagen bijtellen of aftrekken van datum ; DAT = dd.mm.jj ; AD = positief : Aantal dagen bijtellen ; negatief : Aantal dagen terugkeren in tijd Q $$HD^cAFD1($$DH^cAFD1(DAT)+AD) ; TH(K) ; UU:MM:SS naar $H Q $P(K,":")*60+$P(K,":",2)*60+$P(K,":",3) ; ZZ ; 19.03.07 - 15 u 31 * V8.08