[613] | 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))
|
---|