'please post comments at: http://www.powerbasic.com/support/pb...ad.php?t=21524
------------------
[this message has been edited by mike doty (edited february 26, 2005).]
Code:
#compile exe #dim all declare function date2julian(mm_dd_yyyy as string) as long declare function julian2date(julian as long) as string 'quickpak equivalents using an epoch base date of 01-01-1980 'this allows easily storing dates in 2-bytes for 179 years from base date declare function num2date(jd as long) as string declare function date2num(mm_dd_yyyy as string) as long function pbmain as long dim today& today& = date2julian(date$) print " using gregorian calendar print " today is julian "today print today& - date2julian("01-01-" + right$(date$,4)); "days since first of year" print date2julian("12-25-" + right$(date$,4)) - today&;"days until christmas" print today- date2julian("09-11-2001");"since 9/11" print today - date2julian("10-19-1987");"since black friday stock crash" print today - date2julian("06-06-1944");"since d-day" print " day 1 =" julian2date(1) 'wrong print " christmas 2005" date2julian("12-25-2005") print " 24573730 " julian2date(2453730) print print "using quickpak (dates after 12/13/1979 only. allows 2-bytes on disk) today = date2num(date$) print "today is day number" today print "days since first of year" today - date2num("01-01" + right$(date$,4)) print "01-01-1980 is day number" date2num("01-01-1980") print format$(date2num("12-25-" + right$(date$,4)) - today&);" days until christmas" print "day number 1 is " num2date$(1) waitkey$ end function function date2julian(mm_dd_yyyy as string) as long dim month&,day&,year& month = val(left$(mm_dd_yyyy$,2)) day = val(mid$(mm_dd_yyyy$,4,2)) year = val (right$(mm_dd_yyyy$,4)) local k as long, julian as long k = int((14 - month) / 12) julian = day + int(367 * (month + (k * 12) - 2) / 12) _ + int(1461 * (year + 4800 - k) / 4) - 32113 julian = julian - (int(3 * int((year + 100 - k) / 100) / 4) - 2) 'convert to gregorian date2julian = julian end function function julian2date(jd as long) as string dim yr$,mo$,da$ dim m&,d&,y&, q&, r&, s&, t&, u&, v& q = int((jd / 36524.25) - 51.12264) r = jd + q - int(q / 4) + 1 s = r + 1524 t = int((s / 365.25) - 0.3343) u = int(t * 365.25) v = int((s - u) / 30.61) d = s - u - int(v * 30.61) m = (v - 1) + 12 * (v > 13.5) y = t - (m < 2.5) - 4716 yr$ = right$(str$(y), len(str$(y)) - 1) if len(yr$) < 2 then yr$ = "0" + yr$ mo$ = right$(str$(m), len(str$(m)) - 1) if len(mo$) < 2 then mo$ = "0" + mo$ da$ = right$(str$(d), len(str$(d)) - 1) if len(da$) < 2 then da$ = "0" + da$ julian2date = mo$ + "-" + da$ + "-" + yr$ end function function date2num(mm_dd_yyyy$) as long '1/1/1980 = day 1 dim month&,day&,year& month = val(left$(mm_dd_yyyy$,2)) day = val(mid$(mm_dd_yyyy$,4,2)) year = val (right$(mm_dd_yyyy$,4)) local k as long, julian as long k = int((14 - month) / 12) julian = day + int(367 * (month + (k * 12) - 2) / 12) _ + int(1461 * (year + 4800 - k) / 4) - 32113 julian = julian - (int(3 * int((year + 100 - k) / 100) / 4) - 2) 'convert to gregorian date2num = julian - 2444239 'subtract all days before (01-01-1980 =2444240) for quickpak end function function num2date(juliandate as long) as string '01-01-1980 = day 1 dim jd&,yr$,mo$,da$, m&,d&,y&, q&, r&, s&, t&, u&, v& jd = juliandate + 2444239 'add all days before (01-01-1980 =2444240) for quickpak q = int((jd / 36524.25) - 51.12264) r = jd + q - int(q / 4) + 1 s = r + 1524 t = int((s / 365.25) - 0.3343) u = int(t * 365.25) v = int((s - u) / 30.61) d = s - u - int(v * 30.61) m = (v - 1) + 12 * (v > 13.5) y = t - (m < 2.5) - 4716 yr$ = right$(str$(y), len(str$(y)) - 1) if len(yr$) < 2 then yr$ = "0" + yr$ mo$ = right$(str$(m), len(str$(m)) - 1) if len(mo$) < 2 then mo$ = "0" + mo$ da$ = right$(str$(d), len(str$(d)) - 1) if len(da$) < 2 then da$ = "0" + da$ num2date = mo$ + "-" + da$ + "-" + yr$ end function
[this message has been edited by mike doty (edited february 26, 2005).]
Comment