We are working on a web site, which will facilitate the management of
new external modules for BaseX. Users are expected to be able to
upload new modules, search for existing modules and install them in
local BaseX instances with a few clicks. This module will definitely
be a good candidate for this web site.


On Tue, Nov 6, 2018 at 1:35 AM Ron Katriel <rkatr...@mdsol.com> wrote:
>
> Hi Andy,
>
> Thanks for the quick solution! I imported the new module and was able to use 
> the new function as follows:
>
> xs:date(dates:parseDate($trial/completion_date)//value/text()) <= 
> fn:current-date()
>
> I verified the correctness for ~300 dates and the logic appears solid (for 
> the kind of dates discussed below).
>
> Any chance this could find its way into a BaseX release?
>
> Best,
> Ron
>
> On November 5, 2018 at 10:27:48 AM, Andy Bunce (bunce.a...@gmail.com) wrote:
>
> Hi Ron,
>
> I took a quick look at Joe's module and made the following changes:
>
> Change datetime:format-date(..,"yyyy-MM-dd") to 
> format-date(..,"[YYYY]-[MM]-[DD]")
> Change xdt:dayTimeDuration("P1D") -> xs:dayTimeDuration
> Change function in namespace local: to dates:
>
> And saved as a gist [1]. Then in BaseX
>
> import module namespace dates = "http://xqdev.com/dateparser"; at 
> "https://gist.githubusercontent.com/apb2006/ee0effdd53ca80daf4f1b3e99794ed89/raw/7eedb8343c3cbf0e4ef0063be5af532e8bbfe485/date-parser.xqm";;
>
> dates:parseDate("March 2017")
>
> Returns
> <date resolution="month">
>   <range>
>     <start>2017-03-01</start>
>     <end>2017-03-31</end>
>   </range>
>   <value>2017-03-01</value>
> </date>
>
> Joe,
> I think all these changes are compatible with eXist too? [2]
>
> Hope this helps.
> /Andy
>
> [1] https://gist.github.com/apb2006/ee0effdd53ca80daf4f1b3e99794ed89
> [2] https://sourceforge.net/p/exist/mailman/message/34988159/
>
> On Mon, 5 Nov 2018 at 02:03, Ron Katriel <rkatr...@mdsol.com> wrote:
>>
>> 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
>>
>> 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
>>
>> 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) 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