我正在尝试创建XSLT映射以获得上个月的最后(最大)天。
例如,如果我将值2019-10-17传递给映射,则应返回2019-09-30我在这里使用的日期格式为YYYY-MM-DD。
试图从当前数据中获取月份,然后将其减去1,以便它将返回上一个月份。但是我无法获得上个月的最大日期。
xp20:month-from-dateTime (/ns0:ddSelecCorpoMasterOutputCollection/ns0:ddSelecCorpoMasterOutput/ns0:FROM_DATE_FILTER ) - 1
input- sysdateo / p-上个月的最大日期例如-i / p-2019-10-18o / p- 2019-09-30
提前感谢。
如果您有权访问XPath 2.0日期/时间库,
((1)转换为xs:date
<xsl:variable name="d" select="xs:date($in)"/>
((2)提取月份中的日期:
<xsl:variable name="dom" select="day-from-date($d)"/>
((3)从日期中减去此天数:
<xsl:variable name="result" select="$dom - xs:dayTimeDuration('P1D')*dom"/>
您可以在XSLT中使用此XPath-1.0表达式:
concat(substring-before(.,'-'),'-',substring(' 120102030405060708091011',substring-before(substring-after(.,'-'),'-')*2,2),'-',substring(' 313128313031303131303130',substring-before(substring-after(.,'-'),'-')*2,2))
这里上下文节点.
用于转换。结合示例中的路径,表达式将如下所示:
concat(substring-before(/ns0:ddSelecCorpoMasterOutputCollection/ns0:ddSelecCorpoMasterOutput/ns0:FROM_DATE_FILTER,'-'),'-',substring(' 120102030405060708091011',substring-before(substring-after(/ns0:ddSelecCorpoMasterOutputCollection/ns0:ddSelecCorpoMasterOutput/ns0:FROM_DATE_FILTER,'-'),'-')*2,2),'-',substring(' 313128313031303131303130',substring-before(substring-after(/ns0:ddSelecCorpoMasterOutputCollection/ns0:ddSelecCorpoMasterOutput/ns0:FROM_DATE_FILTER,'-'),'-')*2,2))
请注意以下事实,即“ 2月”月份始终为28天。考虑到leap年,将需要更复杂的方法。