Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>You should probably use the <a href="http://www.datejs.com/" rel="nofollow noreferrer">datejs</a> that <a href="https://stackoverflow.com/users/60617/">f3lix</a> recommended, however I was bored and threw together a little object that does exactly what you asked for:</p> <p><em>September 25, 2012: Cleaned code, allow non-extended format, eg 20120925T164740+0200</em></p> <p><em>December 1, 2011: fixed a bug in the month string. August was missing</em></p> <pre><code>var ISODate = { convert : function (input){ if (!(typeof input === "string")) throw "ISODate, convert: input must be a string"; var d = input.match(/^(\d{4})-?(\d{2})-?(\d{2})[T ](\d{2}):?(\d{2}):?(\d{2})(\.\d+)?(Z|(?:([+-])(\d{2}):?(\d{2})))$/i); if (!d) throw "ISODate, convert: Illegal format"; return new Date( Date.UTC( d[1], d[2]-1, d[3], d[4], d[5], d[6], d[7] || 0 % 1 * 1000 | 0 ) + ( d[8].toUpperCase() === "Z" ? 0 : (d[10]*3600 + d[11]*60) * (d[9] === "-" ? 1000 : -1000) ) ); }, format : function(date, utc){ if (typeof date === "string") date = this.convert(date); if (!(date instanceof Date)) throw "ISODate, format: t is not a date object"; var t={'FullYear':0, 'Month':0, 'Date':0, 'Hours':0, 'Minutes':0, 'Seconds':0}; for (var key in t) { if (t.hasOwnProperty(key)) t[key] = date["get" +(utc ? "UTC" :"") + key]() } return this.month[t.Month] + " " + this.ordinal(t.Date) + ", " + t.FullYear + " @ " + this.clock12(t.Hours,t.Minutes); }, month: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], ordinal: function(n) { return n+( [ "th", "st", "nd", "rd" ][ (( n % 100 / 10) | 0) === 1 ? 0 : n % 10 &lt; 4 ? n % 10 : 0 ] ); }, clock12: function(h24, m, s){ h24%=24; var h12 = (h24 % 12) || 12; return h12 + ":" + (m &lt; 10 ? "0" + m : m) + (isFinite(s) ? ":" + (s &lt; 10 ? "0" + s : s ) : "") + (h24 &lt; 12 ? "AM" : "PM"); } }; </code></pre> <p>Example:</p> <pre><code>//Shows the date in the users timezone: alert(ISODate.format("2007-09-21T14:15:34.058-07:00")); //Show the date in UTC (Timezone Z, 00:00) alert(ISODate.format("2007-09-21T14:15:34.058-07:00",true)); </code></pre> <p>Explanation:</p> <p><strong>convert</strong> takes a string as an input and returns a date object if successful or throws an exception if not. The string must be in one of the following formats:</p> <ul> <li>YYYY-MM-DDThh:mm:ss.sZ</li> <li>YYYY-MM-DDThh:mm:ss.sXaa:bb</li> </ul> <p>Where: </p> <ul> <li>YYYY is the year as an 4 digit integer</li> <li>MM is the month as an 2 digit integer</li> <li>DD is the date of month as an 2 digit integer</li> <li>T is the character T or space (\x20)</li> <li>hh is the hour in 24 hour format, as an 2 digit integer</li> <li>mm is the minute as an 2 digit integer</li> <li>ss.s is the second, either as an 2 digit integer or as a floating point with 2 digits followed by a period followed by one or more digits.</li> <li>Z is the character Z (indicating timezone Z, UTC+00:00)</li> <li>X is either a plus (+) or minus (-) sign of the timeoffset to UTC</li> <li>aa is the hour of timeoffset to UTC as a 2 digit integer</li> <li>bb is the minute of timeoffset to ITC as a 2 digit integer</li> </ul> <p><strong>format</strong> takes a string in the above format or a date-object and returns a string formated as:</p> <ul> <li>M D, Y @ h:mm</li> </ul> <p>Where - M is the full English name of the month - D is the date of month with a numerical order suffix (1-2 digits) - Y is the year (1 or more digits) - h is the hour in 12 hour format (1-2 digits) - m is the minute (2 digits)</p> <p><strong>month</strong> is an array with the name of the months</p> <p><strong>ordinal</strong> is a function that takes a number as input and return the number with English ordinal suffix.</p> <p><strong>clock12</strong> is a function that takes hour, minute and second in 24h format and converts it to a string in the US 12h format. The <em>seconds</em> is optional. </p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload