2014-02-12 83 views

回答

0

注意:這是張貼回覆原始帖子,其中包括一個XSLT 2.0用戶定義的函數。這就是爲什麼以下內容也是相同的格式。在XSLT 1.0中做這件事有點困難,但絕對有可能。

難道這不是更簡單嗎?例如:

<xsl:function name="my:thisMonday"> 
    <xsl:param name="date"/> 
    <xsl:variable name="epoch" select="xs:date('0001-01-01')"/> 
    <xsl:variable name="dayNumber" select="fn:days-from-duration($date - $epoch)"/> 
    <xsl:variable name="dayOfWeek" select="$dayNumber mod 7"/> 
    <xsl:value-of select="$date - xs:dayTimeDuration(concat('P', $dayOfWeek, 'D'))"/> 
</xsl:function> 

注:下面的命名空間,必須在樣式表聲明:

xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:fn="http://www.w3.org/2005/xpath-functions" 
xmlns:my="http://www.example.com/my" 
0

我環顧四周互聯網找到一個XSL代碼來計算的一個星期的開始和結束具體的日期,但我不幸運,我準備了以下功能,我喜歡在這裏分享,以幫助他人。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:myfn="http://myfn.com">  
    <xsl:output encoding="UTF-8"/> 

    <xsl:function name="myfn:startAndEndOfWeek"> 
     <xsl:param name="date" /> 

     <xsl:variable name="days"> 
      <day weekday="0" name="Sunday" add="0" sub="6" /> 
      <day weekday="1" name="Monday" add="6" sub="0" /> 
      <day weekday="2" name="Tuesday" add="5" sub="1" /> 
      <day weekday="3" name="Wednesday" add="4" sub="2" /> 
      <day weekday="4" name="Thursday" add="3" sub="3" /> 
      <day weekday="5" name="Friday" add="2" sub="4" /> 
      <day weekday="6" name="Saturday" add="1" sub="5" /> 
     </xsl:variable> 

     <xsl:variable name="specificDate" select="xs:date($date)" /> 
     <xsl:variable name="weekday" select="myfn:day-of-week($specificDate)" /> 


     <xsl:variable name="daysToSubtract" select="$days/*[@weekday=$weekday]/@sub" /> 
     <xsl:variable name="weekStartsOn" select="$specificDate - (xs:dayTimeDuration(concat('P', $daysToSubtract, 'D')))" /> 

     <xsl:variable name="daysToAdd" select="$days/*[@weekday=$weekday]/@add" /> 
     <xsl:variable name="weekEndsOn" select="$specificDate + (xs:dayTimeDuration(concat('P', $daysToAdd, 'D')))" /> 

     <xsl:value-of select="concat('WeekStartsOn: ', $weekStartsOn,' and WeekEndsOn: ',$weekEndsOn)"/> 
    </xsl:function> 

    <xsl:function name="myfn:day-of-week" as="xs:integer?" > 
     <xsl:param name="date" as="xs:anyAtomicType?"/> 
     <xsl:sequence select=" if (empty($date)) then() else xs:integer((xs:date($date) - xs:date('1901-01-06')) div xs:dayTimeDuration('P1D')) mod 7"/> 
    </xsl:function> 

</xsl:stylesheet> 

那一週假設從星期一開始,星期日結束。

希望這有助於。

如果需要更多幫助,請發表評論。

Abdo

相關問題