This is probably something easy, but I'm a bit confused how to do this. How can I, using JavaScript, parse only the time from the following ISO 8601 date string:
2009-12-06T17:10:00
In other words, with the string above, I'd like to output:
5:10 PM
Any guidance/tutorials on this would be great.
This is probably something easy, but I'm a bit confused how to do this. How can I, using JavaScript, parse only the time from the following ISO 8601 date string:
2009-12-06T17:10:00
In other words, with the string above, I'd like to output:
5:10 PM
Any guidance/tutorials on this would be great.
Share Improve this question edited Dec 10, 2009 at 17:10 Peter Mortensen 31.6k22 gold badges110 silver badges133 bronze badges asked Dec 6, 2009 at 18:46 DodinasDodinas 6,80522 gold badges78 silver badges109 bronze badges 2- 1 I didn't mean to close it as a duplicate of that question :'( – Ry- ♦ Commented Jul 24, 2012 at 15:10
- I disagree that this is an exact duplicate of the question shown. Parsing ISO timestamps is a different concern from parsing human input. – Andrew Commented Jan 4, 2013 at 21:30
4 Answers
Reset to default 11Chrome & Firefox: Standard JavaScript Date constructor takes ISO 8601 date string. For example:
var sampleDate = new Date("2010-03-07T02:13:46Z");
Returns this Date object: "Sun Mar 07 2010 13:13:46 GMT+1100 (AUS Eastern Daylight Time)"
This does not work in IE (including latest IE 9)
Here is a cross-browser solution by Paul Sowden at http://delete.me.uk/2005/03/iso8601.html :
Date.prototype.setISO8601 = function (string) {
var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
"(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
"(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
var d = string.match(new RegExp(regexp));
var offset = 0;
var date = new Date(d[1], 0, 1);
if (d[3]) { date.setMonth(d[3] - 1); }
if (d[5]) { date.setDate(d[5]); }
if (d[7]) { date.setHours(d[7]); }
if (d[8]) { date.setMinutes(d[8]); }
if (d[10]) { date.setSeconds(d[10]); }
if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
if (d[14]) {
offset = (Number(d[16]) * 60) + Number(d[17]);
offset *= ((d[15] == '-') ? 1 : -1);
}
offset -= date.getTimezoneOffset();
time = (Number(date) + (offset * 60 * 1000));
this.setTime(Number(time));
}
Usage:
var date = new Date();
date.setISO8601("2005-03-26T19:51:34Z");
If you do a lot of datetime manipulation in JavaScript, I can also suggest to check some JS libraries like MomentJS. It handles some common things like date parsing, formatting and calculating difference between two dates and has support for multiple localizations.
string.slice(11,16)
will return 17:10
. From there (possibly using slice
in more interesting and exciting manners) it should be fairly simple to get it into 24-hour format.
This is so called ISO 8601 format. Mochikit comes with a function to parse it,
http://mochikit.com/doc/html/MochiKit/DateTime.html
You can get a Date object like this,
timestamp = isoTimestamp("2009-12-06T17:10:00");
Just copy the function if you don't want use Mochikit.
Parsing the ISO timestamp is easy, formatting the time in a culturally appropriate way is hard (5:10 PM is not appropriate for all locales) Many toolkits provide routines for the ISO part, and it's even part of the new ECMAScript 5 standard; only a couple do the latter part, however.
You can try dojo.date.stamp.fromISOString and dojo.date.locale.format.
I believe Date-JS can format times also.