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 |