XSLT中的时间秒

Nei*_*ond 2 xml xslt datetime seconds xslt-1.0

我实际上不是在问一个问题.我注册了stackoverflow,回馈了一个帮助了我很多次的社区.

如果您使用的是XSLT 1.0,则没有内置时间计算.我想出了将秒转换为分钟和小时.我希望这可以帮助别人!

<xsl:template name="format-duration">
  <xsl:param name="value" />

  <xsl:variable name="minutes" select="floor($value div 60) mod 60" />
  <xsl:variable name="seconds" select="$value mod 60" />
  <xsl:variable name="hours" select="floor($value div 3600)" />


  <xsl:if test="$hours">
    <xsl:if test="$hours &lt; 10">
      <xsl:text>0</xsl:text>
    </xsl:if>
    <xsl:value-of select="$hours" />

    <xsl:text>:</xsl:text>
  </xsl:if>


  <xsl:if test="$minutes">
    <xsl:if test="$minutes &lt; 10">
      <xsl:text>0</xsl:text>
    </xsl:if>
    <xsl:value-of select="$minutes" />
    <xsl:text></xsl:text>
  </xsl:if>

  <xsl:if test="$minutes and $seconds">
    <xsl:text>:</xsl:text>
  </xsl:if>

  <xsl:if test="$seconds">
    <xsl:value-of select="$seconds" />
    <xsl:text></xsl:text>
  </xsl:if>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

编辑:你有任何其他方法来实现相同的目标吗?

JLR*_*she 5

最重要的是,感谢您的贡献.但是,这种实现存在一些问题.秒输出不走前导0考虑在内,但即使这固定,输出可以是不明确的,如果任何附图中恰好是0.例如,输入36005,60536300所有产生的结果10:05.

同样,如果其中两个数字恰好为零.输入36000产生输出10:,输入60010两者产生结果10.

以下是我将如何实现此功能:

  <xsl:template name="format-duration">
    <xsl:param name="value" select="." />
    <xsl:param name="alwaysIncludeHours" select="false()" />
    <xsl:param name="includeSeconds" select="true()" />

    <xsl:if test="$value > 3600 or $alwaysIncludeHours">
      <xsl:value-of select="concat(format-number($value div 3600, '00'), ':')"/>
    </xsl:if>

    <xsl:value-of select="format-number(floor($value div 60) mod 60, '00')" />

    <xsl:if test="$includeSeconds">
      <xsl:value-of select="concat(':', format-number($value mod 60, '00'))" />
    </xsl:if>
  </xsl:template>
Run Code Online (Sandbox Code Playgroud)

这样,仅当小时非零或可选地打开时才显示小时,默认情况下包括秒,但可以使用参数值可选地省略小时.这应该减少关于时间应该代表什么的模糊性.

value如果要格式化的值是当前上下文节点,它还允许省略参数.