I think your making it harder that it need be. Here is the meat in the
stylesheet I posted. The tricky part is the single digit month, so I pad
the data if its short:
<xsl:variable name="earlierPadded">
<xsl:choose>
<xsl:when test="fn:string-length(substring-before(date[1], '/')) =
1">
<xsl:value-of select="concat('0',date[1])"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="date[1]"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
Substitute the XPath to your datapoints for *data[1]*
Once the string is regularized, the regex features of xslt2 make building a
string in standard date format simple:
<xsl:variable name="regexE"
select="xs:date(fn:replace($earlierPadded, '(.*)/(.*)/(.*)',
'$3-$1-$2'))"/>
This takes the padded string, breaks out the mm, dd and yyyy parts and
reorders them around dash characters. It then casts the string to xs:date
datatype, over which a unique brand of magical date arithmetic can
performed.
Once you have corrected strings cast to xs:date datatypes, just do the
strange and wonderful math:
<xsl:value-of select="$later - $earlier"/>
HTH,
Mike
-----Original Message-----
From: thomas(_dot_)maciejewski(_at_)sgcib(_dot_)com
[mailto:thomas(_dot_)maciejewski(_at_)sgcib(_dot_)com]
Sent: Monday, December 19, 2005 3:57 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Date Difference
I wrote this:
<xsl:function name="sgfr:IsDateGreater">
<xsl:param name="stringDate1"/>
<xsl:param name="stringDate2"/>
<xsl:variable name="tokenizedDate1"
select="tokenize($stringDate1, '/')"/>
<xsl:variable name="monthPart1"
select="subsequence(($tokenizedDate1), 1, 1)"/>
<xsl:variable name="datePart1"
select="subsequence(($tokenizedDate1), 2, 1)"/>
<xsl:variable name="yearPart1"
select="subsequence(($tokenizedDate1), 3, 1)"/>
<xsl:variable name="tokenizedDate2"
select="tokenize($stringDate2, '/')"/>
<xsl:variable name="monthPart2"
select="subsequence(($tokenizedDate2), 1, 1)"/>
<xsl:variable name="datePart2"
select="subsequence(($tokenizedDate2), 2, 1)"/>
<xsl:variable name="yearPart2"
select="subsequence(($tokenizedDate2), 3, 1)"/>
<xsl:choose>
<xsl:when test="yearPart1>yearPart2"><xsl:value-of
select="true"/></xsl:when>
<xsl:when test="yearPart1=yearPart2">
<xsl:choose>
<xsl:when test="monthPart1>monthPart2">
<xsl:value-of select="true"/>
</xsl:when>
<xsl:when test="monthPart1=monthPart2">
<xsl:choose>
<xsl:when
test="datePart1>datePart2"><xsl:value-of select="true"/></xsl:when>
<xsl:otherwise><xsl:value-of
select="false"/></xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise><xsl:value-of
select="false"/></xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise><xsl:value-of
select="false"/></xsl:otherwise>
</xsl:choose>
</xsl:function>
Will this work?
Or am I totally missing the point?
Regards,
Tom Maciejewski
**************************************************************
***********
This message and any attachments (the "message") are confidential and
intended solely for the addressees.
Any unauthorised use or dissemination is prohibited.
E-mails are susceptible to alteration.
Neither SOCIETE GENERALE nor any of its subsidiaries or affiliates
shall be liable for the message if altered, changed or falsified.
**************************************************************
***********
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--