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.
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
Ihre Frage ergibt keinen Sinn. Wie kann ein Double im Format dd.mm.yyyy sein? –
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