2

私は実際に質問をしているわけではありません。何度も私を助けてくれたコミュニティに何かを返すために、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>

編集:同じことを達成する他の方法はありますか?

4

2 に答える 2

6

何よりも、あなたの貢献に感謝します。ただし、この実装にはいくつかの問題があります。秒の出力では先行ゼロは考慮されませんが、それが修正されたとしても、いずれかの数値が0の場合、出力があいまいになる可能性があります。たとえば、入力、、36005および605すべて36300が結果を生成し10:05ます。

同様に、2つの数字がたまたまゼロになった場合。入力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>

このように、時間はゼロ以外またはオプションでオンになっている場合にのみ表示され、秒はデフォルトで含まれていますが、パラメーター値を使用してオプションで省略できます。これにより、時間が何を表すかについてのあいまいさが軽減されます。

またvalue、フォーマットする値が現在のコンテキストノードである場合は、パラメーターを省略できます。

于 2013-03-12T20:39:18.303 に答える