使用 XSLT 显示两个不同日期之间的所有日期

问题描述 投票:0回答:1

我需要一个适用于 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(一月)开始,同时递增当前年份计数。接下来我可以尝试什么?

datetime xslt xslt-2.0
1个回答
0
投票

计算日期之间的天数:

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>
© www.soinside.com 2019 - 2024. All rights reserved.