2012-08-13 5 views
4

Existe-t-il une solution plus élégante à ce qui suit dans xslt 1.0? Je comprends qu'il existe des fonctions intégrées à xslt 2.0.Conversion des heures décimales en heures minutes et secondes

Je prends un nombre en heures décimales et je dois le représenter comme HH: MM: SS. En ce moment j'ai ce qui suit qui fonctionne bien.

<xsl:variable name="decimal_hours" select="pre_lab_cost div pre_labour_rate"/> 
<xsl:variable name="decimal_minutes" select="number(concat('0.',substring-after($decimal_hours, '.')))*60"/> 
<xsl:variable name="decimal_seconds" select="number(concat('0.',substring-after($decimal_minutes, '.')))*60"/> 
<xsl:value-of select="concat(format-number(floor($decimal_hours), '00'), 
              ':', 
              format-number(floor($decimal_minutes), '00'), 
              ':', 
              format-number(floor($decimal_seconds), '00') 
              )"/> 

Répondre

8

Que diriez-vous ... ce

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:variable name="decimal_hours" select="3.14"/> 

<xsl:template match="/"> 
<xsl:value-of select="concat(
    format-number(floor($decimal_hours    ), '00:'), 
    format-number(floor($decimal_hours * 60 mod 60), '00:'), 
    format-number(floor($decimal_hours * 360 mod 360), '00'))"/> 
</xsl:template> 

</xsl:stylesheet> 
+1

Je l'aime, n'a pas considéré comme un mod qui, avec le recul était stupide. – Horba

0

Juste au cas où quelqu'un avait la question que je viens d'avoir la réponse que ci-dessus était brillante, mais je devais prendre Décimal minutes heures: minutes: secondes . donc ci-dessous est la ventilation pour aider à ce que, si nécessaire, une petite coupure en arrière ...

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