【问题标题】:Calculate between two dates in XSL在 XSL 中的两个日期之间计算
【发布时间】:2021-12-02 18:02:03
【问题描述】:

我在 XML 中有这两个节点:

<firstregistrationdate>01.10.2016.</firstregistrationdate>

<currentdate>14.10.2021.</currentdate>

我想计算它们之间的天数或年数,所以如果有人知道如何做到这一点,那将非常有帮助。

谢谢!

【问题讨论】:

  • 嗯,这是几天还是几年?以及如何计算两个日期之间的年份?完全过去的年数、小数平均年数,还是 ...??
  • 例如,如果我们计算年份是这样的: 2021 - 2016 = 5 如果不能计算天数,然后除以一年中的天数得到多少年也就是说..(我们将使用 365)。
  • 可以计算天数。也可以从一年中减去一年。你只需要决定你想要哪一个。请注意,天数除以 365 与减去年数不同。

标签: xslt xslt-2.0


【解决方案1】:

如果你只想要两年之间的差异,你可以这样做:

<xsl:variable name="startyear" select="substring(firstregistrationdate, 7, 4)"/>
<xsl:variable name="endyear" select="substring(currentdate, 7, 4)"/>
<result>
        <xsl:value-of select="xs:integer($endyear) - xs:integer($startyear)"/>
</result>

演示:https://xsltfiddle.liberty-development.net/nbsuwEG

补充:

计算两个日期之间的天数差异在 XSLT 2.0 中也相当简单。您的情况的复杂之处在于输入日期不是预期的 YYYY-MM-DD 格式,因此需要先转换它们:

<xsl:variable name="startdate"  select="replace(firstregistrationdate, '(.{2})\.(.{2})\.(.{4})\.', '$3-$2-$1')"/>
<xsl:variable name="enddate"  select="replace(currentdate, '(.{2})\.(.{2})\.(.{4})\.', '$3-$2-$1')"/>
<result>
    <xsl:value-of select="days-from-duration(xs:date($enddate)-xs:date($startdate))"/>
</result>

演示:https://xsltfiddle.liberty-development.net/nbsuwEG/1

【讨论】:

  • 谢谢!那行得通!如何计算这两个日期之间的天数?
  • 我已将此添加到我的答案中,但作为一项规则,您应该一次问一个问题。
  • 这肯定行得通,但我收到一条消息:找不到函数:从持续时间开始的天数...也许我公司使用的是 xsl 1.0,但我没有肯定知道..
  • @ZoranMaćešić 您已将您的问题标记为 XST 2.0,而我的回答需要 XSLT 2.0。如果您不知道您的处理器支持什么版本,那么首先要查找 - 在这里查看如何:stackoverflow.com/a/25245033/3016153 然后,如果结果证明它只是 XSLT 1.0,请发布一个新问题。或者更确切地说:stackoverflow.com/a/22377178/3016153.
猜你喜欢
  • 2013-03-30
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多