2010-05-03 19 views
0

我有一个格式为H:mm:ss的存储时间值。时间可以是从0到几天的任何值。这些数据以XML标签发送并由XSL处理以显示。我想显示的格式为:在XSL中处理一个字符串中的整数

D days, HH:mm:ss (hours/minutes)

其中最后一个标签显示时间,如果HH大于0,如果分钟为0。

鉴于原HH,这可能是超过24,我知道我需要HH/24的地板才能获得天价值。然后原来的HH%24给了我剩余的时间。

我也使用xsl:whenxsl: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

什么是实际问题?你有一段代码描述了你目前正在做的事情吗? – IAbstract 2010-05-03 17:11:50

+0

@ dboarman-FissureStudios - 我已经更新了一段代码,希望能更清楚地说明我的问题。我需要做的是弄清楚如何在几小时,几分钟和几秒钟内获得格式化的日子,并将其操作为一个漂亮的字符串。 – justkt 2010-05-03 17:19:02

回答

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> 
相关问题