是否可以在 xquery 中获取前一周的天数(周一至周日)?
问问题
1485 次
2 回答
2
另一种解决方案,恰好是纯 XPath 2.0 表达式:
for $vSunday in xs:date('2012-07-08'),
$thisWeekDay in
abs((current-date() - $vSunday) div xs:dayTimeDuration('P1D'))
mod 7 +1,
$lastWeekSunday in
current-date() - xs:dayTimeDuration(concat('P',$thisWeekDay+7,'D')),
$i in 1 to 7,
$d in $lastWeekSunday + xs:dayTimeDuration(concat('P', $i, 'D'))
return
(concat(year-from-date($d),
'-', month-from-date($d),
'-', day-from-date($d)),
('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')
[$i],
'
')
今天(2012-07-08)运行时,结果是:
2012-7-1 Sunday
2012-7-2 Monday
2012-7-3 Tuesday
2012-7-4 Wednesday
2012-7-5 Thursday
2012-7-6 Friday
2012-7-7 Saturday
于 2012-07-08T18:16:44.440 回答
0
看看FunctX XQuery Library,它们提供了一个很好的概述以及一些额外的日期函数。
使用这种模式来例如。计算 7 天前的日期:
fn:current-date() - xs:dayTimeDuration('P7D')
FunctX'day-of-week()
将帮助您计算日期的星期几。
由于解析整个 FunctX 库会使您的查询变得非常慢(取决于您的 XQuery 引擎),因此可能只复制您需要的代码。
此代码将返回过去 7 天的工作日(上周被视为一个时期)。functx:day-of-week
该代码包括 Gunther在评论中描述的修复:
declare namespace functx = "http://www.functx.com";
declare function functx:day-of-week
( $date as xs:anyAtomicType? ) as xs:integer? {
if (empty($date))
then ()
else xs:integer((xs:date($date) - adjust-date-to-timezone(xs:date('1901-01-06'), timezone-from-date(xs:date($date)))
div xs:dayTimeDuration('P1D')) mod 7
} ;
for $day in 1 to 7
let $date := fn:current-date() - xs:dayTimeDuration(concat('P', 8-$day, 'D'))
return <day date="{ $date }">{ functx:day-of-week($date) }</day>
如果这不是您正在寻找的(请始终在您的问题中包含您考虑过的一些代码、输入和预期输出),我相信您将能够对其进行更改以满足您的需求。
于 2012-07-08T16:55:36.413 回答