| 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))
 | 
|---|