parm d="0",v="" ###################################################### ## TODAY [parm1][,parm2] ## ## This command file returns a date relative to ## todays date in the following formats: ## ## date = mmddyy ## date1 = mmddyyyy ## date2 = mm/dd/yy ## date3 = mmm dd, yyyy ## date4 = (day-of-week), mmm dd, yyyy ## date5 = yymmdd ## ## PARM1 - ## An offset may be entered as the 1st parm of the ## command filename. A positive integer is entered ## for a future date. A negative integer is entered ## for a past date. The range of allowable values ## is -365 to 365. The default is 0 for today. ## ## PARM2 - ## A string may be entered as the 2nd parm of the ## command filename. the string is concatenated ## to the variable names used to return the format- ## ted dates to the caller. The string must begin ## with an alpha character and be no more than 3 ## characters in length. The default is a null ## string. ## ## EXAMPLES - ## TODAY ,T Todays date is returned in var- ## iables beginning with the letter ## T (i.e., TDATE, TDATE1, etc.). ## TODAY 7,W07 A date 7 days into the future is ## returned in variables beginning ## with the string W07 (i.e., ## W07DATE, W07DATE1, etc.). ## ## This command file may be executed within a UDC, ## a job stream or interactively to define formatted ## date variables in the user's environment to be ## used in report generation, job scheduling or any- ## where else a formatted date may be required. ## ## Written by: Steve Barrett ## Created: 01/23/92 ## Modified: 01/24/92, 03/17/92, 03/18/92, 03/25/92 ## 05/22/92, 09/12/97 ## 10/16/1998 Greg Stigers ###################################################### ## CHECK THE VALIDITY OF THE PARAMETER INPUTS. if "!d" <> "0" if len("!d") > 1 setvar t1 str("!d",1,1) if ("!t1" <> "+") and ("!t1" <> "-") if numeric("!t1") = FALSE echo PARM1 IS NOT AN INTEGER VALUE. deletevar t1 return endif setvar t1 str("!d",2,(len("!d")-1)) if numeric("!t1") = FALSE echo PARM1 IS NOT AN INTEGER VALUE. deletevar t1 return endif endif endif if len("!d") = 1 if ("!d" = "+") or ("!d" = "-") or (numeric("!d") = FALSE) echo PARM1 IS NOT AN INTEGER VALUE. return endif endif endif ## if (!d > 365) or (!d < -365) ## echo PARM1 IS NOT IN THE ACCEPTABLE RANGE (-365 to 365). ## return ## endif if "!v" <> "" if (len("!v") > 3) or (alpha((str("!v",1,1))) = FALSE) echo PARM2 IS GREATER THAN 3 CHARACTERS IN LENGTH. echo OR, PARM2 DOES NOT BEGIN WITH AN ALPHA CHARACTER. return endif if len("!v") > 1 if alphanum(str("!v",2,(len("!v")-1))) = FALSE echo PARM2 IS NOT ALPHANUMERIC. return endif endif endif ## DEFINE VARIABLES. setvar dte "!v"+"date" setvar dte1 "!v"+"date1" setvar dte2 "!v"+"date2" setvar dte3 "!v"+"date3" setvar dte4 "!v"+"date4" setvar dte5 "!v"+"date5" setvar mo !hpmonth setvar day (!hpdate + !d) setvar yr !hpyear setvar year (!yr + 1900) if !yr < 50 setvar year (!yr + 2000) endif setvar leapyes "312931303130313130313031" setvar leapno "312831303130313130313031" setvar months "JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC" setvar wkday "SUNMONTUEWEDTHUFRISAT" setvar wdleapy "034025036146" setvar wdleapn "144025036146" setvar logic ">" setvar sign "+" if !day <= 0 setvar sign "-" setvar logic "<=" endif setvar nodays "!leapno" if (!year mod 4) = 0 setvar nodays "!leapyes" endif setvar chkdays str(nodays,(!mo*2-1),2) setvar check !chkdays if !day <= 0 setvar chkdays "0" setvar check "0" endif ## INCREMENT OR DECREMENT THE DATE. while !day !logic !check setvar mo (!mo !sign 1) if !day > 0 setvar day (!day - !chkdays) endif if !mo > 12 setvar mo "1" setvar year (!year + 1) endif if !mo < 1 setvar mo "12" setvar year (!year - 1) endif setvar nodays "!leapno" if (!year mod 4) = 0 setvar nodays "!leapyes" endif setvar chkdays str(nodays,(!mo*2-1),2) setvar check !chkdays if !day <= 0 setvar check "0" setvar day (!day + !chkdays) endif endwhile ## CLEAN UP THE VARIABLES TO BE USED IN DATE FORMATS. if !mo < 10 setvar mo "0"+"!mo" endif if !day < 10 setvar day "0"+"!day" endif ## CALCULATE THE DAY OF THE WEEK. setvar yr str("!year",3,2) setvar century str("!year",1,2) setvar wday wdleapn if (!year mod 4) = 0 setvar wday wdleapy endif setvar dv str(wday,!mo,1) setvar dayval (!yr/4)+!yr+!dv+!day if !century = 20 setvar dayval (!dayval - 1) endif setvar dayval (!dayval mod 7) if !dayval = 0 setvar dayval 7 endif setvar daywk str(wkday,(!dayval*3-2),3) setvar mth str(months,(!mo*3-2),3) ## DEFINE THE VARIABLES TO BE RETURNED TO THE CALLER. setvar !dte "!mo"+"!day"+"!yr" setvar !dte1 "!mo"+"!day"+"!year" setvar !dte2 "!mo"+"/"+"!day"+"/"+"!yr" setvar !dte3 "!mth"+" "+"!day"+", "+"!year" setvar !dte4 "!daywk"+", "+"!mth"+" "+"!day"+", "+"!year" setvar !dte5 "!yr"+"!mo"+"!day" setvar !dte6 "!year"+"!mo"+"!day" ## CLEAN UP THE ENVIRONMENT. deletevar mo,day,yr,year,months,wkday,dv,wday,dayval deletevar wdleapy,wdleapn,century,leapyes,leapno,sign,logic deletevar chkdays,check,nodays,mth,dte,dte1,dte2,dte3,dte4,dte5,dte6