|
|
(2 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
− | DTFormat(FMDate,format)
| + | Back to [[Programming VistA Issues]] |
− | ;"SCOPE: PUBLIC
| + | |
− | ;"Purpose: to allow custom formating of fileman dates in to text equivalents
| + | |
− | ;"Input: FMDate -- this is the date to work on, in Fileman Format
| + | [[DTFormat -- an extension to $$FMTE^XLFDT]] |
− | ;" format -- a formating string with codes as follows.
| |
− | ;" yy -- 2 digit year
| |
− | ;" yyyy -- 4 digit year
| |
− | ;" m - month number without a leading 0.
| |
− | ;" mm -- 2 digit month number (01-12)
| |
− | ;" mmm - abreviated months (Jan,Feb,Mar etc.)
| |
− | ;" mmmm -- full names of months (January,February,March etc)
| |
− | ;" d -- the number of the day of the month (1-31) without a leading 0
| |
− | ;" dd -- 2 digit number of the day of the month
| |
− | ;" w -- the numeric day of the week (1-7)
| |
− | ;" ww -- abreviated day of week (Mon,Tue,Wed)
| |
− | ;" www -- day of week (Monday,Tuesday,Wednesday)
| |
− | ;" h -- the number of the hour without a leading 0 (1-23) 24-hr clock mode
| |
− | ;" hh -- 2 digit number of the hour. 24-hr clock mode
| |
− | ;" H -- the number of the hour without a leading 0 (1-12) 12-hr clock mode
| |
− | ;" HH -- 2 digit number of the hour. 12-hr clock mode
| |
− | ;" # -- will display 'am' for hours 1-12 and 'pm' for hours 13-24
| |
− | ;" M - the number of minutes with out a leading 0
| |
− | ;" MM -- a 2 digit display of minutes
| |
− | ;" s - the number of seconds without a leading 0
| |
− | ;" ss -- a 2 digit display of number of seconds.
| |
− | ;" allowed punctuation symbols-- ' ' : , / @ .; (space, colon, comma, forward slash, at symbol,semicolon,period)
| |
− | ;" 'text' is included as is, even if it is same as a formatting code
| |
− | ;" Other unexpected text will be ignored
| |
− | ;"
| |
− | ;" If a date value of 0 is found for a code, that code is ignored (except for min/sec)
| |
− | ;"
| |
− | ;" Examples: with FMDate=3050215.183000 (i.e. Feb 5, 2005 @ 18:30 0 sec)
| |
− | ;" "mmmm d,yyyy" --> "February 5,2005"
| |
− | ;" "mm d,yyyy" --> "Feb 5,2005"
| |
− | ;" "'Exactly' H:MM # 'on' mm/dd/yy" --> "Exactly 6:30 pm on 02/05/05"
| |
− | ;" "mm/dd/yyy" --> "02/05/2005"
| |
− | ;"
| |
− | ;"Output: Text of date, as specified by above
| |
− |
| |
− | new result set result=""
| |
− | new Token set Token=""
| |
− | new LastToken set LastToken=""
| |
− | new ch set ch=""
| |
− | new LastCh set LastCh=""
| |
− | new InStr set InStr=0
| |
− | new done set done=0
| |
− | new i
| |
− |
| |
− | if $get(format)="" goto FDTDone
| |
− | if +$get(FMDate)=0 goto FDTDone
| |
− |
| |
− | for i=1:1:$length(format) do quit:done
| |
− | . set LastCh=ch
| |
− | . set ch=$extract(format,i) ;"get next char of format string.
| |
− | . if (ch'=LastCh)&(LastCh'="")&(InStr=0) do ProcessToken(FMDate,.Token,.result)
| |
− | . set Token=Token_ch
| |
− | . if ch="'" do quit
| |
− | . . if InStr do ProcessToken(FMDate,.Token,.result)
| |
− | . . set InStr='InStr ;"toggle In-String mode
| |
− | . if (i=$length(format)) do ProcessToken(FMDate,.Token,.result)
| |
− |
| |
− | FDTDone
| |
− | quit result
| |
− |
| |
− |
| |
− | ProcessToken(FMDate,Token,Output) | |
− | ;"SCOPE: PRIVATE
| |
− | ;"Purpose: To take tokens and build output following rules specified by DTFormat)
| |
− | ;"Input: FMDate -- the date to work with
| |
− | ;" Token -- SHOULD BE PASSED BY REFERENCE. The code as oulined in DTFormat
| |
− | ;" Output -- SHOULD BE PASSED BY REFERENCE. The cumulative output
| |
− |
| |
− |
| |
− | if $extract(Token,1,1)="'" do goto PTDone
| |
− | . new Str set Str=$extract(Token,2,$length(Token)-1)
| |
− | . set Output=Output_Str
| |
− |
| |
− | if Token=" " set Output=Output_Token goto PTDone
| |
− | if Token="." set Output=Output_Token goto PTDone
| |
− | if Token=":" set Output=Output_Token goto PTDone
| |
− | if Token="/" set Output=Output_Token goto PTDone
| |
− | if Token=";" set Output=Output_Token goto PTDone
| |
− | if Token="," set Output=Output_Token goto PTDone
| |
− | if Token="@" set Output=Output_Token goto PTDone
| |
− |
| |
− | if Token="yy" do goto PTDone
| |
− | . new Year set Year=+$extract(FMDate,1,3)
| |
− | . if Year=0 quit
| |
− | . set Year=+$extract(FMDate,2,3)
| |
− | . if Year<10 set Year="0"_Year
| |
− | . set Output=Output_Year
| |
− |
| |
− | if Token="yyyy" do goto PTDone
| |
− | . new Year set Year=+$extract(FMDate,1,3)
| |
− | . if Year>0 set Output=Output_(Year+1700)
| |
− |
| |
− | if Token="m" do goto PTDone
| |
− | . new Month set Month=+$extract(FMDate,4,5)
| |
− | . if Month>0 set Output=Output_Month
| |
− |
| |
− | if Token="mm" do goto PTDone
| |
− | . new Month set Month=+$extract(FMDate,4,5)
| |
− | . if Month=0 quit
| |
− | . if Month<10 set Month="0"_Month
| |
− | . set Output=Output_Month
| |
− |
| |
− | if Token="mmm" do goto PTDone
| |
− | . new Month set Month=+$extract(FMDate,4,5)
| |
− | . if Month=0 quit
| |
− | . if Month=1 set Output=Output_"Jan" quit
| |
− | . if Month=2 set Output=Output_"Feb" quit
| |
− | . if Month=3 set Output=Output_"Mar" quit
| |
− | . if Month=4 set Output=Output_"Apr" quit
| |
− | . if Month=5 set Output=Output_"May" quit
| |
− | . if Month=6 set Output=Output_"Jun" quit
| |
− | . if Month=7 set Output=Output_"Jul" quit
| |
− | . if Month=8 set Output=Output_"Aug" quit
| |
− | . if Month=9 set Output=Output_"Sept" quit
| |
− | . if Month=10 set Output=Output_"Oct" quit
| |
− | . if Month=11 set Output=Output_"Nov" quit
| |
− | . if Month=12 set Output=Output_"Dec" quit
| |
− |
| |
− | if Token="mmmm" do goto PTDone
| |
− | . new Month set Month=+$extract(FMDate,4,5)
| |
− | . if Month=0 quit
| |
− | . if Month=1 set Output=Output_"January" quit
| |
− | . if Month=2 set Output=Output_"February" quit
| |
− | . if Month=3 set Output=Output_"March" quit
| |
− | . if Month=4 set Output=Output_"April" quit
| |
− | . if Month=5 set Output=Output_"May" quit
| |
− | . if Month=6 set Output=Output_"June" quit
| |
− | . if Month=7 set Output=Output_"July" quit
| |
− | . if Month=8 set Output=Output_"August" quit
| |
− | . if Month=9 set Output=Output_"September" quit
| |
− | . if Month=10 set Output=Output_"October" quit
| |
− | . if Month=11 set Output=Output_"November" quit
| |
− | . if Month=12 set Output=Output_"December" quit
| |
− |
| |
− | if Token="d" do goto PTDone
| |
− | . new Day set Day=+$extract(FMDate,6,7)
| |
− | . if Day>0 set Output=Output_Day
| |
− |
| |
− | if Token="dd" do goto PTDone
| |
− | . new Day set Day=+$extract(FMDate,6,7)
| |
− | . if Day=0 quit
| |
− | . if Day<10 set Day="0"_Day
| |
− | . set Output=Output_Day
| |
− |
| |
− | if Token="w" do goto PTDone
| |
− | . new DOW set DOW=$$DOW^XLFDT(FMDate,1)
| |
− | . if DOW>0 set Output=Output_DOW
| |
− |
| |
− | if Token="ww" do goto PTDone
| |
− | . new DOW set DOW=$$DOW^XLFDT(FMDate,1)
| |
− | . if (DOW<1)!(DOW>7) quit
| |
− | . if DOW=1 set DOW="Sun"
| |
− | . if DOW=2 set DOW="Mon"
| |
− | . if DOW=3 set DOW="Tue"
| |
− | . if DOW=4 set DOW="Wed"
| |
− | . if DOW=5 set DOW="Thur"
| |
− | . if DOW=6 set DOW="Fri"
| |
− | . if DOW=7 set DOW="Sat"
| |
− | . set Output=Output_DOW
| |
− |
| |
− | if Token="www" do goto PTDone
| |
− | . new DOW set DOW=$$DOW^XLFDT(FMDate)
| |
− | . if DOW'="day" set Output=Output_DOW
| |
− |
| |
− | if Token="h" do goto PTDone
| |
− | . new Hour set Hour=+$extract(FMDate,9,10)
| |
− | . if Hour>0 set Output=Output_Hour
| |
− |
| |
− | if Token="hh" do goto PTDone
| |
− | . new Hour set Hour=+$extract(FMDate,9,10)
| |
− | . if Hour=0 quit
| |
− | . if Hour<10 set Hour="0"_Hour
| |
− | . set Output=Output_Hour
| |
− |
| |
− | if Token="H" do goto PTDone
| |
− | . new Hour set Hour=+$extract(FMDate,9,10)
| |
− | . if Hour>12 set Hour=Hour-12
| |
− | . if Hour>0 set Output=Output_Hour
| |
− |
| |
− | if Token="HH" do goto PTDone
| |
− | . new Hour set Hour=+$extract(FMDate,9,10)
| |
− | . if Hour=0 quit
| |
− | . if Hour>12 set Hour=Hour-12
| |
− | . if Hour<10 set Hour="0"_Hour
| |
− | . set Output=Output_Hour
| |
− |
| |
− | if Token="#" do goto PTDone
| |
− | . new Hour set Hour=+$extract(FMDate,9,10)
| |
− | . if Hour=0 quit
| |
− | . if Hour>12 set Output=Output_"pm"
| |
− | . else set Output=Output_"am"
| |
− |
| |
− | new Min set Min=+$extract(FMDate,11,12)
| |
− |
| |
− | if Token="M" do goto PTDone
| |
− | . new Min set Min=+$extract(FMDate,11,12)
| |
− | . set Output=Output_Min
| |
− |
| |
− | if Token="MM" do goto PTDone
| |
− | . new Min set Min=+$extract(FMDate,11,12)
| |
− | . if Min<10 set Min="0"_Min
| |
− | . set Output=Output_Min
| |
− |
| |
− | if Token="s" do goto PTDone
| |
− | . new Sec set Sec=+$extract(FMDate,13,14)
| |
− | . set Output=Output_Sec
| |
− |
| |
− | if Token="ss" do goto PTDone
| |
− | . new Sec set Sec=+$extract(FMDate,13,14)
| |
− | . if Sec<10 set Sec="0"_Sec
| |
− | . set Output=Output_Sec
| |
− |
| |
− | PTDone
| |
− | set Token=""
| |
− | quit
| |