parm parm1=*, parm2='*', parm3='*' ;delta=0 comment This comfile will provide information about any given date. comment Syntax: comment [[yyyy,] mm, ] dd comment [[yyyy,] mmm,] dd comment [[ yy,] mm, ] dd comment DT [{ [[ yy,] mmm,] dd }] [;DELTA=offset] comment [yyyy,] ddd comment [ yy,] ddd comment jjjjjjjj comment lllll comment [-]day comment comment where yyyy = year including century comment default: current year comment yy = year of the century (note DT uses a forward/backward comment cutoff date algorithm based on the year 49) comment Current Year Specified yy Century assumed is comment 00 - 49 00 - 49 current century comment 00 - 49 50 - 99 previous century comment 50 - 99 00 - 49 next century comment 50 - 99 50 - 99 current century comment default: current year comment mm = month of the year (1-12) comment default: current month comment mmm = month of the year (JAN, FEB, MAR...) comment default: current month comment dd = day of the month (1-31) comment default: current day comment ddd = day of the year (001-366) comment (must be 3 digits long) comment jjjjjjj = julian date (Royal Astronomical Society format) comment (must be 6 or more digits long) comment lllll = julian date (Lotus 1-2-3, Quattro format) comment (must be 4-5 digits long) comment day = day of the week (eg 'SUNDAY', 'THU', 'FRIDAY' - must comment be 3 or more character) or 'TODAY' comment day returns the next date (excluding today) for the comment given day. comment -day returns the last date (including today) for the comment given day. comment offset = a +ve/-ve number of days to add to date specified by comment the other parameters comment comment The information is returned in the following system variables: comment dt_jd - julian date (astronomical format) comment dt_jld - julian date (Lotus 1-2-3, Quattro format) comment dt_yr - year (including century) comment dt_moy - month of the year (1-12) comment dt_fmoy - month of the year (JAN, FEB...) comment dt_dom - day of the month (1-31) comment dt_doy - day of the year (1-366) comment dt_dow - day of the week (1-7, 1=Sun, 2=Mon, etc) comment dt_fdow - day of the week (SUN, MON...) comment dt_md - days in the month (1-31) comment dt_ymd - date in the form YYYYMMDD comment dt_ly - leap year (TRUE/FALSE) comment dt_woy - week of year (0-53) comment dt_error - indicates if date was correctly processed (true, false) comment comment If executed interactively, DT will also display the date comment information in the form: comment lotus = julian = metric = imperial = standard (days in month) comment week of year = week comment Clive Pottinger (1992) comment comment V1.00.00 92/??/?? Original version C.P. comment V1.04.00 95/08/03 Added alphanumeric day of week C.P. comment V1.05.00 97/11/24 Added alphanumeric month of year C.P. comment V1.06.00 98/03/05 Added -day and TODAY C.P. comment V1.07.00 98/07/09 Added cutoff date for xx year C.P. setvar dx_sub bound(dx_sub) setvar dt_yr hpyear setvar dt_moy '!hpmonth' setvar dt_dom hpdate + !delta setvar dx_fmt 'YMD' if '!parm3' = '*' if '!parm2' = '*' setvar dx_dow pos(ups(lft('!parm1 ' - '-',3)) + ' ', & ' SUN MON TUE WED THU FRI SAT ') / 4 if dx_dow > 0 if lft('!parm1', 1) = '-' setvar dt_dom dt_dom - (!hpday - dx_dow + 7) mod 7 else setvar dt_dom dt_dom + 7 - (!hpday - dx_dow + 7) mod 7 endif elseif ups('!parm1' - '-') = 'TODAY' setvar dt_dom !hpdate elseif len('!parm1') > 3 if len('!parm1') > 5 setvar dt_jd !parm1 + !delta else setvar dt_jd !parm1 + 2415019 + !delta endif setvar dx_fmt 'JD' elseif len('!parm1') = 3 setvar dt_doy !parm1 + !delta setvar dx_fmt 'YD' elseif '!parm1' <> '*' setvar dt_dom !parm1 + !delta endif elseif len('!parm2') = 3 setvar dt_yr !parm1 setvar dt_doy !parm2 + !delta setvar dx_fmt 'YD' else setvar dt_moy '!parm1' setvar dt_dom !parm2 + !delta endif else setvar dt_yr !parm1 setvar dt_moy '!parm2' setvar dt_dom !parm3 + !delta endif if lft(dx_fmt, 1) = 'Y' and dt_yr < 100 setvar dx_yr ![rht(hpdatef, 2)] setvar dx_yr (dx_yr / 50) - (dt_yr / 50) setvar dt_yr ![rht(hpdatef, 4)]-hpyear + dt_yr + 100 * dx_yr endif if numeric(dt_moy) setvar dt_moy !dt_moy else setvar dt_moy pos(ups(lft('!dt_moy ',3)) + ' ', & ' JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ') / 4 endif if dx_fmt = 'JD' setvar dx_x dt_jd - 1721425 setvar dx_x dx_x - ((dx_x+306)/146097) setvar dx_x dx_x + ((dx_x+305)/36524) setvar dx_x dx_x - ((dx_x+306)/1461) setvar dt_yr (dx_x-1)/365 + 1 setvar dx_ld & 1-min(dt_yr mod 4,1)+min(dt_yr mod 100,1)-min(dt_yr mod 400,1) setvar dx_x (365 * dt_yr - dx_x) * 100 + 50 setvar dx_x dx_x + 200*(dx_x/30650) - dx_ld setvar dt_moy 12 - (dx_x /3059) setvar dt_dom (3059*(13-dt_moy) - dx_x)/100 + 1 setvar dt_doy 365+dx_ld - (3059*(13-dt_moy)+50)/100 + dt_dom + & (2-dx_ld)*((13-dt_moy)/11) else setvar dx_ld & 1-min(dt_yr mod 4,1)+min(dt_yr mod 100,1)-min(dt_yr mod 400,1) if dx_fmt = 'YD' setvar dx_x 366 + dx_ld - dt_doy setvar dx_x dx_x + (2-dx_ld)*(dx_x/307) setvar dt_moy 12 - (dx_x*100-50)/3059 setvar dt_dom ((13-dt_moy)*3059+150)/100 - dx_x else setvar dt_doy 365+dx_ld - (3059*(13-dt_moy)+50)/100 + dt_dom + & (2-dx_ld)*((13-dt_moy)/11) endif setvar dt_jd 1721425 + 365*(dt_yr-1) + dt_doy & + (dt_yr-1) / 4 & - (dt_yr-1) / 100 & + (dt_yr-1) / 400 endif setvar dt_jld dt_jd - 2415019 setvar dt_md 30 + (dt_moy + (dt_moy/8)) mod 2 & - ((1-abs(min((dt_moy-2), 1))) * (2-dx_ld)) setvar dt_dow (dt_jd+1) mod 7 + 1 setvar dt_woy 1 + ((dt_dow-1 - dt_doy) mod 7 + dt_doy) / 7 & - ((dt_dow - dt_doy) mod 7) / 4 setvar dt_ly dx_ld = 1 if dt_doy < 1 or dt_doy > 365 + dx_ld or & dt_dom < 1 or dt_dom > dt_md or & dt_moy < 1 or dt_moy > 12 dt !dt_jd endif setvar dt_ymd dt_yr*10000 + dt_moy*100 + dt_dom setvar dt_fmoy & str(' JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC', dt_moy*3,3) setvar dt_fdow str(' SUNMONTUEWEDTHUFRISAT', dt_dow*3,3) if hpusercmdepth < 2 and hpjobtype = 'S' and not dx_sub echo !dt_jld = !dt_jd = !dt_yr/!dt_moy/!dt_dom = ![rht('00!dt_doy',3)]-& !dt_yr = !dt_fdow, !dt_fmoy !dt_dom, !dt_yr (!dt_md days in !dt_fmoy) echo week of year = !dt_woy endif if dx_sub setvar dx_sub false else deletevar dx_@ > $null setvar dt_error false endif