Wystąpił problem, którego nie jestem pewien, jak rozwiązać. Użyłem odpowiedzi w Seconds to Time aby utworzyć szablon w XSLT 1.0. Jednak gdy mój czas trwania zbliża się do liczby całkowitej, wynik jest niepoprawny. Po uruchomieniu z wartościami znacznie większymi lub mniejszymi wynik wydaje się prawidłowy.
Mój szablon jest jak poniżej. Kiedy mam Czas trwania na 3597, wynik pojawia się o 00:60:57 zamiast 00:59:57, a czas trwania 955 daje wynik 00:16:55 zamiast 00:15:55.
Próbowałem usunąć moduł z myśląże mógłbym po prostu podciągnąć wynik, ale to nie zmieniło wyniku 3597 i pomieszało wiele wyników, które są poprawne w poniższym kodzie. Rozszerzyłem również numer formatu, aby zawierał więcej cyfr, ale to również nie zmienia wynik. Próbowałem także użyć floor ($ Czas trwania - $ godziny div 60), ale to nie działało lub źle sformatowałem.
czego mi brakuje? Nie rozumiem, jak 3597/60 może równać się 60, zwłaszcza gdy biorę moduł.
<xsl:template name="calculatedDuration">
<xsl:param name="Duration"/>
<xsl:choose>
<xsl:when test="$Duration >= 3600">
<xsl:value-of select="concat(format-number($Duration div 3600, "00"), ":")"/>
</xsl:when>
<xsl:otherwise>00:</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="format-number($Duration div 60 mod 60, "00")"/>
<xsl:value-of select="concat(":", format-number($Duration mod 60, "00"))"/>
</xsl:template>
Odpowiedzi:
1 dla odpowiedzi № 1To dlatego, że format-number
wykonuje zaokrąglanie, a nie obcinanie. format-number(59.97, "00")
ma wartość 60, a nie 59. Więc użyj format-number(floor($Duration div 60) mod 60, "00")
zamiast.