xsl-list
[Top] [All Lists]

RE: Date Difference

2005-12-19 15:11:34

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>
--~--



<Prev in Thread] Current Thread [Next in Thread>