我需要一个适用于 XSLT 2.0 的正确逻辑,用于显示给定两个不同日期之间的所有日期。例如如果
2022-10-01
(YYYY-MM-dd)2023-04-01
我需要显示结果,例如:
2022-10-31, 2022-11-30, 2022-12-31, 2023-01-31 , 2023-02-28, 2023-03-31, 2023-04-30
我弄清楚了日期部分,但我不知道如何准确增加月份和年份部分。当月份达到 12(十二月)时,应再次从 1(一月)开始,同时递增当前年份计数。接下来我可以尝试什么?
计算日期之间的天数:
fn:days-from-duration((xs:date('2023-04-01') - xs:date('2022-10-01'))
然后生成一个 1 到持续时间天数的序列,将该数字转换为
xs:dayTimeDuration()
天数,并将这些天数添加到开始日期:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<xsl:variable name="start" select="xs:date('2023-04-01')"/>
<xsl:variable name="end" select="xs:date('2022-10-01')"/>
<xsl:sequence select="(1 to fn:days-from-duration(($start - $end )) ) ! ($start + xs:dayTimeDuration('P'||.||'D') )"/>
</xsl:template>
</xsl:stylesheet>