如何将"今天"和"昨天"等相关日期转换为XQuery日期对象?

Sid*_*dhu 5 xquery date

XQuery有一组用于日期转换的有用函数.但是如何将"今天"和"昨天"等相关日期转换为实际日期?

例如,"今天,17:33"应转换为"2012-05-30","昨天,22:13"应转换为"2012-05-29".

Jen*_*rat 9

1.解析Date字符串

解析日期字符串.我提供了一个小函数,它将表示日期的单词拆分并解析它.我为日期添加了一些更方便的名称,但如果需要,您可以轻松添加更多,请注意我转换为小写!它使用XQuery日期和时间函数来计算匹配日期.

declare function local:from-relative-date($string as xs:string) as xs:date {
    switch (lower-case(substring-before($string, ",")))
        case "today"                return current-date()
        case "yesterday"            return current-date() - xs:dayTimeDuration('P1D')
        case "day before yesterday" return current-date() - 2 * xs:dayTimeDuration('P1D')       
        case "tomorrow"             return current-date() + xs:dayTimeDuration('P1D')       
        case "day after tomorrow"   return current-date() + 2 * xs:dayTimeDuration('P1D')       
        default                     return error(xs:QName("XPTY0004"), "Unknown Date")
};
Run Code Online (Sandbox Code Playgroud)

2.格式化日期

现在使用XQuery 3.0函数format-date(...)(我希望你的XQuery引擎支持它,我用于本例的BaseX)来格式化你需要的日期字符串:

format-date(local:from-relative-date("Yesterday, 22:13"), "[Y]-[M00]-[D00]")
Run Code Online (Sandbox Code Playgroud)

如果没有,你将不得不使用year-from-date(...),并根据对职能,用一些数字格式并连接自己.