我有以下格式的两个日期:
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。
提前致谢。
编辑:问题是我没有得到任何输出,只有我的状态日期不等于上个月的状态。
答案 0 :(得分:0)
你不需要数字函数,如果两个文本值都是数字,它只是将它们比作它们。
我怀疑您的问题可能是您使用<=
作为比较器;您需要使用<
转义<
,然后使用<=
。
就日期差异而言,我使用此模板(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 <= 30
上进行直接比较。