! datediff
INCLUDE "gw.bas"

Fn.def IsLeapYear(year)
  IF MOD(year, 4) = 0 THEN
    IF MOD(year, 100) = 0 THEN
      IF MOD(year, 400) = 0 THEN
        Fn.rtn 1
      ELSE
        Fn.rtn 0
      ENDIF
    ELSE
      Fn.rtn 1
    ENDIF
  ELSE
    Fn.rtn 0
  ENDIF
Fn.end

fn.def countLeapYears(y1,y2)
  n=0
  for i=0 to y1-y2
    if IsLeapYear(y2+i)
      n=n+1
    endif
  next i
 fn.rtn n
fn.end

fn.def DateDiffInDays(y1,m1,d1,y2,m2,d2)
  ARRAY.LOAD dmd[], 31,28,31,30,31,30,31,31,30,31,30,31
  array.load mname$[], "jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","dez"
  !calc days of years
  print "y1=";y1
  print "y2=";y2
  dy=y1-y2  
  print "dy=y1-y2=";dy
  n=0
  for i=0 to y1-y2
    if IsLeapYear(y2+i)
      n=n+1
    endif
  next i
  print str$(n)+ " leapyears included
  yeardays=dy*365+n
  print "days of years with leapyears=";yeardays

  !calc days of months
  dm=0
  print y1,m1,d1
  print y2,m2,d2
  if abs(m2-m1)>0
    print "months unequal"
    
    print "monthdiff=";12-m2+m1
    !m1=8, m2=5, 13
    for i=m2 to m1+12-m2+m1-1
      j=mod(i,12)+1
      dm=dm+dmd[j]
      print "i=";i;" j=";j;" dmd[j]=";dmd[j];" dm=";dm;" ";mname$[j]
    next i
  else
    print "months equal"
  endif
  if d1=d2
    print "days equal"
    totaldays=yeardays
  else
    print "days unequal"
    !start month sub days
    dm=dm-d2
    print "dm=dm-start=";dm
    !stop month add days
    dm=dm+d1
    print "dm=dm+stop=";dm
    totaldays=yeardays+dm
  endif
  fn.rtn totaldays
fn.end

! ============
! === main ===
! ============
page = GW_NEW_PAGE()
GW_ADD_TITLEBAR(page, "DateDiff")
t1=gw_add_inputdate(page,"Date 1","2019-06-19")
t2=gw_add_inputdate(page,"Date 2","1978-06-19")
gw_add_text(page,"Date 2 > Date 1 !")
GW_ADD_BUTTON(page, "Calc Difference", "button_calc")
t3=gw_add_textbox(page,"...")
t4=gw_add_textbox(page,"...")
GW_RENDER(page)
DO
r$ = GW_WAIT_ACTION$()
if r$="button_calc" then
 dd1$=gw_get_value$(t1)
 dd2$=gw_get_value$(t2)
 y1=val(mid$(dd1$,1,4))
 m1=val(mid$(dd1$,6,2))
 d1=val(mid$(dd1$,9,2))
 y2=val(mid$(dd2$,1,4))
 m2=val(mid$(dd2$,6,2))
 d2=val(mid$(dd2$,9,2))
 s4$="Date1 is "
 if IsLeapYear(y1)
   s4$=s4$+"leapyear."
 else
   s4$=s4$+"no leapyear."
 endif
 s4$=s4$+" Date2 is "
 if IsLeapYear(y2)
   s4$=s4$+"leapyear."
 else
   s4$=s4$+"no leapyear."
 endif
 days=DateDiffInDays(y1,m1,d1,y2,m2,d2)
 s3$="Days="+format$("##########",days)
 s3$=s3$+" Years="+format$("######.###",days/365.25)
 gw_modify(t3,"text",s3$)
 s4$="contains "+str$(countLeapYears(y1,y2))+" leap years"
 gw_modify(t4,"text",s4$)
 print s4$
 print s3$
end if
UNTIL r$ = "BACK"
