2016-11-22 4 views
0

Ich möchte die Funktion verwenden: Tage-von-Dauer ($ NewDate - $ OldDate) , um den Unterschied zwischen meinem Datum und dem aktuellen Datum() ($ NewDate) .XSLT: konvertieren ein Doppel zu einem Datum in Xsl

Mein Problem ist, dass diese Funktion nicht mein Datum nimmt, das vom Typ double ist. Es hat das Format: dd.mm.yyyy ($ oldDate)

Meine Frage ist, wie kann ich ein Doppel mit diesem Format zu einem Datum konvertieren, damit ich diese Funktion verwenden kann?

+0

Willkommen bei Stack Overflow! Um Ihnen eine gute Antwort zu geben, könnte es uns helfen, wenn Sie einen Blick auf [fragen] haben, falls Sie das nicht bereits getan haben. Es könnte auch nützlich sein, wenn Sie ein [mcve] bereitstellen könnten. – Mat

+0

Ihre Frage ergibt keinen Sinn. Wie kann ein Double im Format dd.mm.yyyy sein? –

+0

Wenn ich es von meinem XML bekomme, hat es dieses Format 30.10.2016, und sieht wie ein Datum aus, aber wenn ich versuche, es mit current-date() zu benutzen, sagt es, dass die Datentypen nicht übereinstimmen. – Chrizzy

Antwort

0

Ein Wert von 30.10.2016 kann kein Doppel sein. Wenn das Ihre Eingabe enthält, behandeln Sie es als Zeichenfolge und extrahieren Sie die einzelnen Komponenten, um ein gültiges Datum zu erstellen, das als YYYY-MM-DD formatiert wird.

Betrachten Sie das folgende Beispiel:

XML

<input>30.10.2016</input> 

XSLT 2,0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:my="http://www.example.com/my" 
exclude-result-prefixes="xs my"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:function name="my:reformat-date"> 
    <xsl:param name="datestring"/> 
    <xsl:variable name="y" select="substring($datestring, 7, 4)"/> 
    <xsl:variable name="m" select="substring($datestring, 4, 2)"/> 
    <xsl:variable name="d" select="substring($datestring, 1, 2)"/> 
    <xsl:sequence select="xs:date(concat($y, '-', $m, '-', $d))" /> 
</xsl:function> 

<xsl:template match="/"> 
    <difference> 
     <xsl:value-of select="days-from-duration(current-date() - my:reformat-date(input))"/> 
    </difference> 
</xsl:template> 

</xsl:stylesheet> 

Ergebnis (wenn heute angewandt, 22. November 2016)

<?xml version="1.0" encoding="UTF-8"?> 
<difference>23</difference> 

Beachten Sie, dass dies der Eingang übernimmt als DD.MM.YYYY formatiert - das heißt mit führenden Nullen für einstellige Tage und Monate.

+0

Das sieht wirklich gut aus. Eine Frage die ich habe ist: Ich habe eine xsl Seite wo ich dieses xsl: stylesheet benutzen möchte? Wie rufe diese Funktion auf einer xsl-Seite auf? – Chrizzy

+0

@Chrizzy Sie rufen wie in meinem Beispiel gezeigt. Ich kann nicht genauer sein, weil ich dein Stylesheet nicht sehe. Wenn Sie es nicht schaffen, bearbeiten Sie Ihre Frage und zeigen Sie ein [mcve]. –

Verwandte Themen