Skip to content

Instantly share code, notes, and snippets.

@fsans
Last active October 6, 2022 16:34
Show Gist options
  • Save fsans/ef507208081722e14646366cd7009ada to your computer and use it in GitHub Desktop.
Save fsans/ef507208081722e14646366cd7009ada to your computer and use it in GitHub Desktop.
Convert between ISO8601 and FileMaker Date formats

ISO8601 - FM data and time conversions

ISO8601GetDate( isoDate )

Let ( 
  [
	_input_date = Filter( GetValue( Split( isoDate; "T" ); 1 ); "0123456789");
	_year = Left(_input_date;4);
	_month = Middle ( _input_date ; 5 ; 2 );
	_day = Middle ( _input_date ; 7 ; 2 )
  ] ;
  Date ( _month; _day; _year )
)

/* 
by air.fsans@gmail.com 2022
dependencies:
    Split(str, delim)
*/

ISO8601FormatDate( fmDate )

Case ( 
  not IsEmpty ( fmDate ) ; 
  Year( fmDate ) & "-" & Right ( "0" & Month ( fmDate ) ; 2 ) & "-" & Right ( "0" & Day ( fmDate ) ; 2 ) 
)

/* 
by air.fsans@gmail.com 2022
*/

ISO8601ParseDate( isoDate )

Let ( 
  [
    yearString  = Left ( isoDate ; 4 ) ;
    dash1       = Middle ( isoDate ; 5 ; 1 ) ;
    monthString = Middle ( isoDate ; 6 ; 2 ) ;
    dash2       = Middle ( isoDate ; 8 ; 1 ) ;
    dayString   = Right ( isoDate ; 2 ) ;
    yearNum     = GetAsNumber ( yearString ) ;
    monthNum    = GetAsNumber ( monthString ) ;
    dayNum      = GetAsNumber ( dayString )
  ] ;
  Case ( 
    IsEmpty ( isoDate ) ;
      "" ;
    ( Filter ( yearString ; "0123456789" ) ≠ yearString or
              Filter ( monthString ; "0123456789" ) ≠ monthString or
              Filter ( dayString ; "0123456789" ) ≠ dayString or
              dash1 ≠ "-" or
              dash2 ≠ "-" or
              monthNum < 1 or 
              monthNum > 12 or 
              dayNum < 1 or 
              dayNum > 31 ) ;
      "?" ;
    Date ( monthNum ; dayNum ; yearNum )
  )
)

/* 
by air.fsans@gmail.com 2022
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment