Posted by rp8 on Saturday, December 13, 2008

Here’s a simple script to parse the JSON date serialized by Rails in ISO 8601 format such as “2008-12-13T16:08:32-06:00”.

ISO 8601 DateTime:

var s = “2008-12-13T16:08:32-06:00”;

var date = Date2.parse(s);

date.toString() => Sat Dec 13 2008 16:08:32 GMT-0600 (CST)

date.toUTCString() => Sat, 13 Dec 2008 22:08:32 GMT

date.toLocaleString() => Sat 13 Dec 2008 04:08:32 PM CST

Date2.toString(date) => December 13, 2008


  <script type="text/javascript">
    function p(msg) {
      document.write(msg + "<br/>");
    }

    var Date2 = {
      Months: [["January","Jan"],["Febuary","Feb"],["March","Mar"],
        ["April","Apr"],["May","May"],["June","Jun"],
        ["July","Jul"],["August","Aug"],["September","Sep"],
        ["october","Oct"],["November","Nov"],["December","Dec"]],

      parse: function(isoDate) {
        var match = /(\d{4})-(\d{2})-(\d{2})T(\d{2}:\d{2}:\d{2})([+|-]?\d{2}:\d{2})/.exec(isoDate);
        var date = new Date(match[1], match[2]-1, match[3]);
        date = this.Months[date.getMonth()][1] + " " + date.getDate() 
          + " " + date.getFullYear() + " " + match[4] + " GMT " + match[5].replace(/:/, "");
        date = new Date(Date.parse(date));
        return date;
      },

      toString: function(date) {
        return this.Months[date.getMonth()][0] + " " + date.getDate() + ", " + date.getFullYear();
      }
    }

    var s = "2008-12-13T16:08:32-06:00";
    var date = Date2.parse(s);
    p("ISO 8601 DateTime:");
    p("var s = " + s + ";");
    p("var date = Date2.parse(s);");
    p("date.toString() => " + date.toString());
    p("date.toUTCString() => " + date.toUTCString());
    p("date.toLocaleString() => " + date.toLocaleString());
    p("Date2.toString(date) => " + Date2.toString(date));

  </script>