Hi Joe,

Thanks for sharing that. I tried adapting your eXist port to BaseX and ran
into issues with namespaces. At this point I don’t have the time or
expertise to complete this but hopefully someone else will take up the
challenge.

Best,
Ron

On November 3, 2018 at 12:19:49 AM, Joe Wicentowski (joe...@gmail.com)
wrote:

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.xqy
<https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_marklogic-2Dcommunity_commons_blob_master_dates_date-2Dparser.xqy&d=DwMFaQ&c=fi2D4-9xMzmjyjREwHYlAw&r=44jDQvzmnB_-ovfO6Iusj0ItciJrcWMOQQwd2peEBBE&m=e-vvgsru1Z5x9LvDMbzC4IlnNmLD9Gh74LxZE20a3-A&s=QXbGrJ9vbbC9tQ9k_8qdKN-M6_zHwScCTYBIHAAlxbc&e=>

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.xqm
<https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_HistoryAtState_twitter_blob_master_modules_date-2Dparser.xqm&d=DwMFaQ&c=fi2D4-9xMzmjyjREwHYlAw&r=44jDQvzmnB_-ovfO6Iusj0ItciJrcWMOQQwd2peEBBE&m=e-vvgsru1Z5x9LvDMbzC4IlnNmLD9Gh74LxZE20a3-A&s=AGe6aYSio39Gb6aYBk41uIcAk3LA3ex3jxCg1ZUCA3M&e=>

Best,
Joe

On Fri, Nov 2, 2018 at 6:48 PM Ron Katriel <rkatr...@mdsol.com> wrote:

> Hi Christian,
>
> Much appreciated! I hardened the code (see below) since the dates (from
> CT.gov
> <https://urldefense.proofpoint.com/v2/url?u=http-3A__CT.gov&d=DwMFaQ&c=fi2D4-9xMzmjyjREwHYlAw&r=44jDQvzmnB_-ovfO6Iusj0ItciJrcWMOQQwd2peEBBE&m=e-vvgsru1Z5x9LvDMbzC4IlnNmLD9Gh74LxZE20a3-A&s=sTeb3eQJ-UU9JJcyp70O4qY6e-PGeWQUHJJhfe3A9uE&e=>)
> 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.gr...@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-2Dfunctions-2D31_-23func-2Dparse-2Dietf-2Ddate&d=DwIFaQ&c=fi2D4-9xMzmjyjREwHYlAw&r=44jDQvzmnB_-ovfO6Iusj0ItciJrcWMOQQwd2peEBBE&m=Yy9sC1xS_Ix-pGSVDp-Lbmz8BOft0S1WdVpEM-qzRw4&s=uQ3NqCv8FpHulP4q1arjItJX3-gCHwi_06WN4znRz48&e=
>
>
>
> On Fri, Nov 2, 2018 at 9:09 PM Ron Katriel <rkatr...@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
>
>

Reply via email to