Use XSLT 2.0 (XPath 2.0) for this :
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:my="my:my"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="/"> <xsl:variable name="vDate1" select="my:dateFromUsDate(/*/d1)"/> <xsl:variable name="vDate2" select="my:dateFromUsDate(/*/d2)"/> <xsl:sequence select= "($vDate1 - $vDate2) div xs:dayTimeDuration('P1D')"/> </xsl:template> <xsl:function name="my:dateFromUsDate" as="xs:date"> <xsl:param name="pUsDate" as="xs:string"/> <xsl:sequence select= "xs:date(concat(substring($pUsDate,7,4), '-', substring($pUsDate,1,2), '-', substring($pUsDate,4,2) ) ) "/> </xsl:function> </xsl:stylesheet>
when this conversion is applied to the following XML document:
<t> <d1>04/06/2011</d1> <d2>01/11/2010</d2> </t>
the desired, correct result is created (the difference is 450 days) :
450
Dimitre novatchev
source share