1 | ONCDTUTL ;Hines OIFO/SG - CALENDAR UTILITIES ; 9/13/06 2:35pm
|
---|
2 | ;;2.11;ONCOLOGY;**46**;Mar 07, 1995;Build 39
|
---|
3 | ;
|
---|
4 | ; $$DIM, DTDIFF, and $$ISLEAP are M translations of functions from
|
---|
5 | ; the Orpheus package (http://sourceforge.net/projects/tporpheus/).
|
---|
6 | ;
|
---|
7 | ; ONCDTUTL OvcDate.pas
|
---|
8 | ; -------- -----------
|
---|
9 | ; DTDIFF DateDiff
|
---|
10 | ; $$DIM DaysInMonth
|
---|
11 | ; $$ISLEAP IsLeapYear
|
---|
12 | ;
|
---|
13 | Q
|
---|
14 | ;
|
---|
15 | ;***** DTDIFF^ONCDTUTL USAGE EXAMPLE
|
---|
16 | DEMO ;
|
---|
17 | D DEMO1(3061201,62)
|
---|
18 | D DEMO1(3061231,62)
|
---|
19 | D DEMO1(3000415,-700)
|
---|
20 | D DEMO1(3051020,0)
|
---|
21 | W !
|
---|
22 | Q
|
---|
23 | ;
|
---|
24 | DEMO1(DATE1,ND) ;
|
---|
25 | N DATE2,DAYS,MONTHS,YEARS
|
---|
26 | S DATE2=$$FMADD^XLFDT(DATE1,ND)
|
---|
27 | D DTDIFF^ONCDTUTL(DATE1,DATE2,.DAYS,.MONTHS,.YEARS)
|
---|
28 | W !,$$FMTE^XLFDT(DATE1)_" - "_$$FMTE^XLFDT(DATE2)
|
---|
29 | W ?35,"Days: "_$J(DAYS,2)," Months: "_$J(MONTHS,2)," Years: "_YEARS
|
---|
30 | Q
|
---|
31 | ;
|
---|
32 | ;***** RETURNS NUMBER OF DAYS IN THE MONTH
|
---|
33 | ;
|
---|
34 | ; M Month
|
---|
35 | ; Y Year
|
---|
36 | ;
|
---|
37 | DIM(M,Y) ;
|
---|
38 | Q:(M=1)!(M=3)!(M=5)!(M=7)!(M=8)!(M=10)!(M=12) 31
|
---|
39 | Q:(M=4)!(M=6)!(M=9)!(M=11) 30
|
---|
40 | Q:M=2 $S($$ISLEAP(Y):29,1:28)
|
---|
41 | Q 0
|
---|
42 | ;
|
---|
43 | ;***** CALCULATES DIFFERENCE BETWEEN TWO DATES
|
---|
44 | ;
|
---|
45 | ; DATE1 First date (FileMan)
|
---|
46 | ; DATE2 Second date (FileMan)
|
---|
47 | ;
|
---|
48 | ; .DAYS Number of days is returned via this parameter
|
---|
49 | ; .MONTHS Number of months is returned via this parameter
|
---|
50 | ; .YEARS Number of years is returned via this parameter
|
---|
51 | ;
|
---|
52 | DTDIFF(DATE1,DATE2,DAYS,MONTHS,YEARS) ;
|
---|
53 | N DAY1,DAY2,DT1,DT2,MONTH1,MONTH2,TMP,YEAR1,YEAR2
|
---|
54 | ;--- We want DATE2 > DATE1; convert to YYYY/MM/DD
|
---|
55 | I DATE1>DATE2 D
|
---|
56 | . S DT1=$$FMTE^XLFDT(DATE2,"7D")
|
---|
57 | . S DT2=$$FMTE^XLFDT(DATE1,"7D")
|
---|
58 | E D
|
---|
59 | . S DT1=$$FMTE^XLFDT(DATE1,"7D")
|
---|
60 | . S DT2=$$FMTE^XLFDT(DATE2,"7D")
|
---|
61 | ;--- Convert dates to day, month, year
|
---|
62 | S YEAR1=$P(DT1,"/"),MONTH1=$P(DT1,"/",2),DAY1=$P(DT1,"/",3)
|
---|
63 | S YEAR2=$P(DT2,"/"),MONTH2=$P(DT2,"/",2),DAY2=$P(DT2,"/",3)
|
---|
64 | ;--- Days first
|
---|
65 | S:DAY1=$$DIM(MONTH1,YEAR1) DAY1=0,MONTH1=MONTH1+1
|
---|
66 | S:DAY2=$$DIM(MONTH2,YEAR2) DAY2=0,MONTH2=MONTH2+1
|
---|
67 | I DAY2<DAY1 D
|
---|
68 | . S MONTH2=MONTH2-1
|
---|
69 | . S:'MONTH2 MONTH2=12,YEAR2=YEAR2-1
|
---|
70 | . S DAYS=DAY2+$$DIM(MONTH1,YEAR1)-DAY1
|
---|
71 | E S DAYS=DAY2-DAY1
|
---|
72 | ;--- Now months and years
|
---|
73 | S:MONTH2<MONTH1 MONTH2=MONTH2+12,YEAR2=YEAR2-1
|
---|
74 | S MONTHS=MONTH2-MONTH1,YEARS=YEAR2-YEAR1
|
---|
75 | Q
|
---|
76 | ;
|
---|
77 | ;***** INDICATES LEAP YEAR
|
---|
78 | ;
|
---|
79 | ; YEAR Year (4 digits)
|
---|
80 | ;
|
---|
81 | ; Return Values:
|
---|
82 | ; 0 Regular year
|
---|
83 | ; 1 Leap year
|
---|
84 | ;
|
---|
85 | ISLEAP(YEAR) ;
|
---|
86 | Q (YEAR#4=0)&(YEAR#4000'=0)&((YEAR#100'=0)!(YEAR#400=0))
|
---|