|
Subject: RE: [xsl] Date Difference From: "Haarman, Michael" <mhaarman@xxxxxxxxx> Date: Mon, 19 Dec 2005 16:11:34 -0600 |
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.maciejewski@xxxxxxxxx
> [mailto:thomas.maciejewski@xxxxxxxxx]
> Sent: Monday, December 19, 2005 3:57 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> 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.
>
> **************************************************************
> ***********
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] Date Difference, Michael Kay | Thread | RE: [xsl] Date Difference, Haarman, Michael |
| RE: [xsl] Date Difference, thomas . maciejewski | Date | RE: [xsl] Date Difference, Wendell Piez |
| Month |