Format Date Using XSL

I need to format the date in an XML Response. It is returned in the following format YYYYMMDD, and I'd like to have it display as MM/DD/YYYY.

I have the following code in place in the XSL file, and if I replace

value-of select="ms:format-date(Date, 'MMM dd, yyyy')"/

with just Date, I can get the results unformatted, but I'm apparently a bit off on my attempt to format.

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl=""
<xsl:template match="/">

    <h2>Tracking Results</h2>
          <table width="70%" border="1" cellpadding="1" cellspacing="0" bordercolor="#FFFFFF" bgcolor="#CCCCCC">
      <xsl:for-each select="TrackResponse/Shipment/Package/Activity">
                        <td width="10%"><xsl:value-of select="ms:format-date(Date, 'MMM dd, yyyy')"/></td>
            <td width="10%"><xsl:value-of select="Time"/></td>
            <td width="40%"><xsl:value-of select="ActivityLocation/Address/City"/>,
            <xsl:value-of select="ActivityLocation/Address/StateProvinceCode"/>,
            <xsl:value-of select="ActivityLocation/Address/CountryCode"/></td>
            <td width="40%"><xsl:value-of select="Status/StatusType/Description"/></td>

Hopefully my explanation is clear.
Thanks in advance.
Who is Participating?
rdcproConnect With a Mentor Commented:
There was a recent thread that discussed several approaches.  One was a pure XSLT approach, and the other was one that used extension functions.  I rather prefer the extension function approach as it seems easier to me, but it assumes that your stylesheet isn't going to need to be portable (that is, it will only have to work on MSXML).   Here's the extension approach:

<xsl:stylesheet version="1.0"
   <xsl:output method="html" encoding="UTF-8"/>
   <msxsl:script language="JScript" implements-prefix="dates">
           function parseDate(oNodeList) {
           // construct a dateString from your node
           var dateString = oNodeList[0].text.substr(0, 4) + "-" + oNodeList[1].text.substr(4, 2) + "-" + oNodeList[2].text.substr(6, 2);
           var t = Date.parse(dateString);
           return t;
           function formatDate(t) {
           arrMonth = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
           var oDate = new Date(t);
           return arrMonth[oDate.getMonth()] + " " + oDate.getDate() + "," + oDate.getFullYear();

Call the extension function with:

<xsl:value-of select="dates:formatDate(dates:parseDate(Date))"/>

Basically the extension function takes a nodelist with your Date node in it.  A date string is constructed, and a static method of the Date Object is used to get the time (number of milliseconds since somewhere around January 1970).  This is used to instantiate a new date object.

The formatDate constructs an array of the months, and uses the getMonth() method of the new Date object to return the Month string.

This could be done in a single function, but I like to split them up like this.

Take a look at this thread for the pure XSLT approach:

Mike Sharp
I think you have to use MSXML 4 for this.  Make sure your progID is for the version 4 parser ("Msxml2.DomDocument.4.0").

If you can't use MSXML 4 to do this, you'll have to resort to MSXML 3, and in that case I usually just write an extension function that does what I need.  Here's an example that plays around with dates:

Chris Bayes has written an MSXSL extension that supports EXSLT:

Mike Sharp

DCfromDisplayAuthor Commented:
Yeah, it looks like I should get away from using MSXML 4. While I'm not crystal clear on the solution after looking at your example, I hope to figure it out over the weekend.

Thanks again,

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

oh, I meant you need to use MSXML 4, if you want the built-in IXTLRuntime format-date() function.  I think it was left out of MSXML 3, but I can't say for sure.

Mike Sharp
DCfromDisplayAuthor Commented:
I'm afraid that I've not been able to make it work using your example. Any other suggestions would be greatly appreciated.

The problem with the MSXML 4 that I see is that I can't be sure that every client that tries to access this page will have these capabilities.

Also, here is a sample of the XML Response that I receive.

<?xml version="1.0" encoding="UTF-8"?>

            <Description>NDA EAM/EXP EAM</Description>
                    <Description>FRONT DOOR</Description>
DCfromDisplayAuthor Commented:
Thanks again...I think I'm well on my way now.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.