Nic*_*ado 1 xml oracle xslt xquery bpel
我在 Oracle Bpel 中进行转换时遇到一些问题 我收到一个日期和一个组标准:mm/yyyy 或:yyyy。
所以,我必须用我收到的日期构建一个“开始日期”和一个“结束日期”。
如果标准是 mm/yyyy,则开始日期将是给定月/年的第一天,结束日期将是给定月/年的最后一天。
我知道有一个函数叫做:functx:last-day-of-month
但是我无法在 Oracle Bpel 中完成这项工作,所以这就是我使用这个答案的原因:XSLT 中上个月的最后一天 只想知道如何在任何给定月份执行此操作。
示例:对于给定日期:2012-10-20T20:18:33
我应该返回日期:
开始日期:2012-10-01
结束日期:2012-10-31
非常感谢您的帮助。
如果您的处理器仅支持 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>
Run Code Online (Sandbox Code Playgroud)
示例调用:
<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>
Run Code Online (Sandbox Code Playgroud)
返回:
<output>2012-10-31</output>
Run Code Online (Sandbox Code Playgroud)
示例调用:
<output>
<xsl:call-template name="last-day-of-month">
<xsl:with-param name="date">2012-02-15</xsl:with-param>
</xsl:call-template>
</output>
Run Code Online (Sandbox Code Playgroud)
返回:
<output>2012-02-29</output>
Run Code Online (Sandbox Code Playgroud)
为了完成,在XSLT 2.0 中,您可以执行以下操作:
xs:date($given-date) - xs:dayTimeDuration(concat('P', day-from-date($given-date) - 1, 'D')) + xs:yearMonthDuration('P1M') - xs:dayTimeDuration('P1D')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5798 次 |
最近记录: |