XQuery 有一组用于日期转换的有用函数。但是如何将“今天”和“昨天”等相对日期转换为实际日期?
例如,“今天,17:33”应转换为“2012-05-30”,“昨天,22:13”应转换为“2012-05-29”。
解析日期字符串。我提供了一个小函数,它拆分表示日期的单词并解析它。我为日期添加了一些更方便的名称,但如果需要,您可以轻松添加更多名称,请注意我转换为小写!它使用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")
};
现在使用 XQuery 3.0 函数format-date(...)
(我希望您的 XQuery 引擎支持它,我在本示例中使用的 BaseX 支持)来格式化您需要的日期字符串:
format-date(local:from-relative-date("Yesterday, 22:13"), "[Y]-[M00]-[D00]")
如果没有,您将不得不使用year-from-date(...)
并根据月份和日期的功能,使用一些数字格式并自己连接。