使用xslt获取状态日期大于或等于今天日期减去30天的项目?

时间:2010-09-01 05:16:51

标签: xml sharepoint xslt

我有以下格式的两个日期:

1)<xsl:value-of select="ddwrt:FormatDateTime(string(@Status_x0020_Date) ,1033 ,'yyyy-MM-dd ')" />

2)<xsl:value-of select="ddwrt:FormatDateTime(string(../../../Strategic_Items_Daily_Status/Rows/Row/@Status_x0020_for_x0020_Last_x002) ,1033 ,'yyyy-MM-dd ')" />

我正在使用SharePoint Designer创建条件来比较这些值。状态日期应大于或等于上个月的状态。

我开始检查状态日期是否大于或等于上个月的状态,但我认为SPD的“翻译”错误。有什么想法吗?

    [@Item_x0020_ID = $dvt_ParentRow/@ID and 
number(translate(substring-before(../../../../../../../../../Rows/Row/@Status_x0020_Date,'T'),'-','')) 
<= number(translate(substring-before($Today,'T'),'-',''))]

页面上日期的输出类似于2010-09-01。

提前致谢。

编辑:问题是我没有得到任何输出,只有我的状态日期不等于上个月的状态。

1 个答案:

答案 0 :(得分:0)

你不需要数字函数,如果两个文本值都是数字,它只是将它们比作它们。

我怀疑您的问题可能是您使用<=作为比较器;您需要使用<转义&lt;,然后使用&lt;=

就日期差异而言,我使用此模板(Xslt 1.0):

<xsl:template name="calcdays">
  <xsl:param name="date" />
  <xsl:variable name="year" select="substring($date,1,4)" />
  <xsl:variable name="month" select="substring($date,6,2)" />
  <xsl:variable name="day" select="substring($date,9,2)" />
  <xsl:value-of select="(($year - 1970) * 365) + floor(($year - 1969) div 4) + substring('000,031,059,090,120,151,181,212,243,273,304,334,365',($month * 4) - 3,3) + ($day - 1) + (1 - floor((($year mod 4) + 2) div 3))*floor(($month + 17) div 20)" />
  </xsl:template>
</xsl:stylesheet>

确定自1970年1月1日以来的天数,假设传入的参数格式为yyyy-mm-dd任何其他形式,您可以调整子字符串。

使用日期字符串调用此模板并将结果传递给变量,您可以在$later - $earlier &lt;= 30上进行直接比较。