是否可以在xquery中获取前一周的日期(星期日)?
答案 0 :(得分: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
答案 1 :(得分:0)
看看FunctX XQuery Library,它们提供了很好的概述,还有一些额外的日期功能。
使用此模式,例如。计算7天前的日期:
fn:current-date() - xs:dayTimeDuration('P7D')
FunctX' day-of-week()
将帮助您计算某一天的某一天。
解析整个FunctX库可能会使您的查询变得非常慢(取决于您的XQuery引擎),也许只能复制您需要的代码。
此代码将返回过去7天的工作日(上周显示为期间)。该代码包括Gunther对functx:day-of-week
的修正,他在评论中描述了这些:
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>
如果这不是您正在寻找的(请始终包含您想到的一些代码,问题中的输入和预期输出),我相信您可以根据自己的需要进行更改。< / p>