Xquery:获取上周的工作日

时间:2012-07-08 15:42:19

标签: xml xpath xquery xpath-2.0

是否可以在xquery中获取前一周的日期(星期日)?

2 个答案:

答案 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>