Add on Functions: Difference between revisions

From VistApedia
Jump to navigationJump to search
No edit summary
No edit summary
Line 1: Line 1:
  [[DTFormat -- an extension to $$FMTE^XLFDT]]
  [[DTFormat -- an extension to $$FMTE^XLFDT]]
DTFormat(FMDate,format)
        ;"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
        ;"   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

Revision as of 21:39, 17 May 2005