Hi Ron,
You might find Ryan Grimm's date-parser library module useful if you have a larger range of date formats to handle:
https://github.com/marklogic-community/commons/blob/master/dates/date-parser...
While it was written with some MarkLogic-specific code, I adapted it for use with eXist (but haven't tested it with BaseX):
https://github.com/HistoryAtState/twitter/blob/master/modules/date-parser.xq...
Best, Joe
On Fri, Nov 2, 2018 at 6:48 PM Ron Katriel rkatriel@mdsol.com wrote:
Hi Christian,
Much appreciated! I hardened the code (see below) since the dates (from CT.gov) occasionally also have the day of the month (e.g., “March 21, 2014”). Currently the function is dropping the day in such cases but I will look into capturing it in a future iteration.
Best, Ron
declare function local:to-date($string) { if (fn:matches($string, '[A-Za-z]+ [0-9]+') or fn:matches($string, '[A-Za-z]+ [0-9]+, [0-9]+')) then let $m := index-of($MONTHS, substring-before($string, ' ')) let $y := xs:integer(functx:substring-after-last($string, ' ')) return xs:date(string-join( ( format-number($y, '0000'), format-number($m, '00'), '01' ), '-') ) else () };
On November 2, 2018 at 4:20:41 PM, Christian Grün ( christian.gruen@gmail.com) wrote:
Hi Ron,
If your timestamp is available in IETF format, you can use fn:parse-ietf-date [1]. Otherwise, you’ll need to write a simple function by yourself:
declare variable $MONTHS := ( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' );
declare function local:to-date($string) { let $m := index-of($MONTHS, substring-before($string, ' ')) let $y := xs:integer(substring-after($string, ' ')) return xs:date(string-join(( format-number($y, '0000'), format-number($m, '00'), '01' ), '-')) }; local:to-date('March 2017')
Best, Christian
[1] https://urldefense.proofpoint.com/v2/url?u=https-3A__www.w3.org_TR_xpath-2Df...
On Fri, Nov 2, 2018 at 9:09 PM Ron Katriel rkatriel@mdsol.com wrote:
Hi,
Is there a BaseX function for converting a string date in the form of
“March 2017” to xs:date or xs:dateTime?
Thanks, Ron