我有一个存储的时间值,格式为H:mm:ss
。小时数可以是从0到几天的任何值。此数据在XML标记中发送,并由XSL处理以显示。我想要的显示格式为:
D days, HH:mm:ss (hours/minutes)
如果HH大于0,则最后一个标签显示小时数,如果小于0则显示小时数。
考虑到最初的HH,可能超过24,我知道我需要HH / 24的最低价来获得天数值。然后原来的HH%24给了我剩下的时间。
我还使用xsl:when
和xsl:if
来处理分钟和小时问题。
我从小时的价值中得到了日子和时间。
修改 到目前为止,我正在考虑做以下事情:
变量声明
<xsl:variable name="time"><xsl:value-of select="time" /><xsl:variable>
<xsl:variable name="days"><xsl:value-of select="floor(substring-before(time, ':') / 24)" /></xsl:variable>
<xsl:variable name="hours"><xsl:value-of select="substring-before(time, ':') mod 24" /></xsl:variable>
<xsl:variable name="minutes"><xsl:value-of select="substring-after(time, ':')" /></xsl:variable>
使用
<xsl:if test="$days > 0">
<xsl:value-of select="$days" /> days
</xsl:if>
<xsl:value-of select="$hours" />:<xsl:value-of select="$minutes" />
<xsl:choose>
<xsl:when test="$hours > 0">
hour<xsl:if test="$hours > 1">s</xsl:if>
</xsl:when>
<xsl:otherwise>
minute<xsl:if test="$minute != '01:00'">s</xsl:if>
</xsl:otherwise>
</xsl:choose>
澄清一下,样本时间为<time>26:15:00</time>
1天2:15小时。
答案 0 :(得分:0)
以下是我原始尝试工作所需的修改。我需要记住变量的美元符号。我需要使用div
而不是/
。最重要的是,我需要表达式number
来将子字符串转换为数字。这就是我想出来的。我欢迎评论,这将改善我的XSLT!
<xsl:variable name="time"><xsl:value-of select="time" /><xsl:variable>
<xsl:variable name="totalHours><xsl:value-of select="number(substring-before($time, ':'))" /></xsl:variable>
<xsl:variable name="days"><xsl:value-of select="floor($totalHours div 24)" /></xsl:variable>
<xsl:variable name="hours"><xsl:value-of select="$totalHours mod 24" /></xsl:variable>
<xsl:variable name="minutes"><xsl:value-of select="substring-after(time, ':')" /></xsl:variable>