如何检查日期是否属于XSLT文件中的周末

时间:2013-09-10 21:46:48

标签: xml xslt xslt-1.0 xslt-2.0

我正在尝试创建一个xsl转换,它将占用一个日期,添加27天并检查新的日期是否属于周末,如果是,它将找到下一个非周末日(星期一)并显示它,否则显示它,如果它没有在周末。这是否可能,这也需要考虑到闰年。

3 个答案:

答案 0 :(得分:3)

从您的约会开始:

<xsl:variable name="date" select="'2013-09-13T00:40:00'" />

然后,显然,您可以使用:

<xsl:sequence select="$date +27*xs:dayTimeDuration('P1D')"/>

但这仅适用于XSLT 2.0,我没有。

您可以使用以下方法查看一周的哪一天:

<xsl:variable name="day-of-week">
  <xsl:call-template name="calculate-day-of-the-week"> <!--0-6, where 0=Sun,1=Mon,2=Tue,3=Wed,4=Thu,5=Fri,6=Sat-->
      <xsl:with-param name="date-time" select="$date" />
  </xsl:call-template>
</xsl:variable>

<xsl:template name="calculate-day-of-the-week">
  <xsl:param name="date-time"/>
  <xsl:param name="date" select="substring-before($date-time,'T')"/>
  <xsl:param name="year" select="substring-before($date,'-')"/>
  <xsl:param name="month" select="substring-before(substring-after($date,'-'),'-')"/>
  <xsl:param name="day" select="substring-after(substring-after($date,'-'),'-')"/>
  <xsl:variable name="a" select="floor((14 - $month) div 12)"/>
  <xsl:variable name="y" select="$year - $a"/>
  <xsl:variable name="m" select="$month + 12 * $a - 2"/>
  <xsl:value-of select="($day + $y + floor($y div 4) - floor($y div 100) + floor($y div 400) + floor((31 * $m) div 12)) mod 7"/>
</xsl:template>

'星期几'将为您提供0-6(周日至周六)的值。这将占闰年并将在XSLT 1.0中起作用

然后你可以使用:

<xsl:if test="day-of-week=0>
  <xsl:sequence select="$date +28*xs:dayTimeDuration('P1D')"/>
</xsl:if>
<xsl:if test="day-of-week=6>
  <xsl:sequence select="$date +29*xs:dayTimeDuration('P1D')"/>
</xsl:if>

我不能在没有XSLT 2.0的情况下测试这段代码,但希望这会让你朝着大方向前进。

答案 1 :(得分:0)

在XSLT 2.0中,使用

test="xs:integer(format-date($date, '[F1]', (), 'ISO', ())) ge 6"

这假设实现支持ISO日历,其中弱日期从1 =星期一到7 =星期日编号。

或者,也许更好,获得自已知星期日以来的天数,并取结果mod 7:

($date - xs:date('1900-MM-DD')) div xs:dateTimeDuration('P1D') mod 7 ge 5

答案 2 :(得分:0)

已经提出了各种XSLT 2.0解决方案。

在XSLT 1.0或2.0中,您可以使用jday模板定义here来计算输入日期的Julian日期编号。加27;总和是输入日期后27天的Julian日数。

对于任何朱利安日数J,确定星期几的最简单方法是计算J mod 7:如果J mod 7 = 0,则该日是星期一;如果J mod 7是5或6,则该日是星期六或星期日。

要查找下周一,请添加适当的天数,然后使用模板jdate将朱利安日数转换为日期。