如何将 XSLT 2.0 日期持续时间转换为字符串?
我正在使用一些代码使用 XSLT 2.0 从另一个日期中减去一个日期:
<xsl:template match="moveInDate">
<xsl:value-of select="current-date() - xs:date(.)"/>
</xsl:template>
这可行,但是它给我留下了 P2243D 的答案,我认为它对应于“2243 天的周期”(即数学上正确)。
由于我只需要天数,而不是 P 和 D,我知道我可以使用子字符串或类似的东西,但作为 XSLT 的新手,我很好奇是否有更好、更优雅的方法来做到这一点简单的字符串操作。
I am using some code to subtract one date from another using XSLT 2.0:
<xsl:template match="moveInDate">
<xsl:value-of select="current-date() - xs:date(.)"/>
</xsl:template>
This works, however it leaves me with an answer of P2243D, which I assume corresponds to a "Period of 2243 Days" (which is correct in terms of the math).
Since I only need the number of days, not the P and the D, I know I could use substring or something similar, but as a newbie to XSLT, I'm curious if there is a better, more elegant way to do this than simple string manipulation.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以简单地使用
fn:days-from-duration()
来获取xs:integer
形式的持续时间:请参阅XQuery 1.0 和 XPath 2.0 函数和运算符规范以获取更多信息。
对于您的情况:
希望这有帮助!
编辑:您也可以按照您所说的方式进行子字符串处理。但正如您所指出的,这不是首选。如果您出于某种原因想做类似的事情,您需要考虑数据类型。
current-date() - xs:date(.)
的结果作为xs:duration
返回,如果不进行强制转换,子字符串函数就无法对其进行处理:You could simply use
fn:days-from-duration()
to get the duration as axs:integer
:See the XQuery 1.0 and XPath 2.0 Functions and Operators specification for more information.
In your case:
Hope this helps!
EDIT: You could also do it the way you say, with substring processing. But as you point out, it's not prefered. If you for some reason would like to do something similar you need to think of the data types. The result of
current-date() - xs:date(.)
is returned asxs:duration
which cannot be processed by the substring functions without being casted: