我在使用Oracle Bpel进行转换时遇到了一些问题 我收到了一个日期和一个组标准:mm / yyyy或:yyyy。
所以,我必须用收到的日期构建一个“开始日”和“结束日期”。
如果标准是mm / yyyy,则开始日期是给定月/年的第一天,结束日期,即给定月/年的最后一天。
我知道有一个名为functx:last-day-of-month
的函数但我无法在Oracle Bpel中完成这项工作,所以这就是我使用这个答案的原因:Last day of previous month in XSLT 只想知道如何在任何一个月内做到这一点。
实施例: 对于给定日期:2012-10-20T20:18:33
我应该回复日期:
开课日期:2012-10-01
截止日期:2012-10-31
非常感谢您的帮助。
答案 0 :(得分:3)
如果您的处理器仅支持XSLT 1.0,您可以通过调用以下命名模板来确定任何给定日期的最后一天:
<xsl:template name="last-day-of-month">
<xsl:param name="date"/>
<xsl:param name="y" select="substring($date, 1, 4)"/>
<xsl:param name="m" select="substring($date, 6, 2)"/>
<xsl:param name="cal" select="'312831303130313130313031'"/>
<xsl:param name="leap" select="not($y mod 4) and $y mod 100 or not($y mod 400)"/>
<xsl:param name="month-length" select="substring($cal, 2*($m - 1) + 1, 2) + ($m=2 and $leap)" />
<xsl:value-of select="concat($y, '-', $m, '-', $month-length)" />
</xsl:template>
示例电话:
<output>
<xsl:call-template name="last-day-of-month">
<xsl:with-param name="date">2012-10-20T20:18:33</xsl:with-param>
</xsl:call-template>
</output>
返回:
<output>2012-10-31</output>
示例电话:
<output>
<xsl:call-template name="last-day-of-month">
<xsl:with-param name="date">2012-02-15</xsl:with-param>
</xsl:call-template>
</output>
返回:
<output>2012-02-29</output>
完成后,您可以在 XSLT 2.0 中执行以下操作:
xs:date($given-date) - xs:dayTimeDuration(concat('P', day-from-date($given-date) - 1, 'D')) + xs:yearMonthDuration('P1M') - xs:dayTimeDuration('P1D')