javascript - can a JSON feed be filtered to just show time from timestamp string? -
i remotely retrieving external json feed via jsonp. json feed contains data including start_time , end_time variables in array have time data encoded in "javascript built-in json object , iso8601" this:
2016-01-21t13:00:00+10:00
i want put data in preformatted table (there reason why) , want remove date data , leave time on value (i.e. 13:00).
is possible filter/parse entire json data object , convert these timestamp data strings show time before start using data (like preformat run directly on api feed)?
example snippet of json data:
var response={ "bookings": { "group_id": 12306, "name": "public meeting rooms", "url": "http:theurlfeed.from.libcal", "timeslots": [{ "room_id": "36615", "room_name": "meeting room 2a", "booking_label": "mahjong", "booking_start": "2016-01-20t10:00:00+10:00", "booking_end": "2016-01-20t11:00:00+10:00" }, { "room_id": "36615", "room_name": "meeting room 2a", "booking_label": "mahjong", "booking_start": "2016-01-20t11:00:00+10:00", "booking_end": "2016-01-20t12:00:00+10:00" }, { "room_id": "36615", "room_name": "meeting room 2a", "booking_label": "mahjong", "booking_start": "2016-01-20t12:00:00+10:00", "booking_end": "2016-01-20t13:00:00+10:00" }, { "room_id": "36615", "room_name": "meeting room 2a", "booking_label": "jo tindall , sagarika", "booking_start": "2016-01-20t14:00:00+10:00", "booking_end": "2016-01-20t15:00:00+10:00" }, { "room_id": "36615", "room_name": "meeting room 2a", "booking_label": "jo tindall , sagarika", "booking_start": "2016-01-20t15:00:00+10:00", "booking_end": "2016-01-20t16:00:00+10:00" }, { "room_id": "36615", "room_name": "meeting room 2a", "booking_label": "james math", "booking_start": "2016-01-20t16:00:00+10:00", "booking_end": "2016-01-20t17:00:00+10:00" }, { "room_id": "36615", "room_name": "meeting room 2a", "booking_label": "james math", "booking_start": "2016-01-20t17:00:00+10:00", "booking_end": "2016-01-20t18:00:00+10:00" }, { "room_id": "36615", "room_name": "meeting room 2a", "booking_label": "james math", "booking_start": "2016-01-20t18:00:00+10:00", "booking_end": "2016-01-20t19:00:00+10:00" }, { "room_id": "36616", "room_name": "meeting room 2b", "booking_label": "ielts", "booking_start": "2016-01-20t10:00:00+10:00", "booking_end": "2016-01-20t11:00:00+10:00" }, { "room_id": "36616", "room_name": "meeting room 2b", "booking_label": "recording", "booking_start": "2016-01-20t11:00:00+10:00", "booking_end": "2016-01-20t12:00:00+10:00" }, { "room_id": "36616", "room_name": "meeting room 2b", "booking_label": "recording", "booking_start": "2016-01-20t12:00:00+10:00", "booking_end": "2016-01-20t13:00:00+10:00" }, { "room_id": "36616", "room_name": "meeting room 2b", "booking_label": "ielts", "booking_start": "2016-01-20t13:00:00+10:00", "booking_end": "2016-01-20t14:00:00+10:00" }, { "room_id": "36616", "room_name": "meeting room 2b", "booking_label": "ielts", "booking_start": "2016-01-20t15:00:00+10:00", "booking_end": "2016-01-20t16:00:00+10:00" }, { "room_id": "36616", "room_name": "meeting room 2b", "booking_label": "luke", "booking_start": "2016-01-20t16:00:00+10:00", "booking_end": "2016-01-20t17:00:00+10:00" }, { "room_id": "36616", "room_name": "meeting room 2b", "booking_label": "luke", "booking_start": "2016-01-20t17:00:00+10:00", "booking_end": "2016-01-20t18:00:00+10:00" }, { "room_id": "36616", "room_name": "meeting room 2b", "booking_label": "luke", "booking_start": "2016-01-20t18:00:00+10:00", "booking_end": "2016-01-20t19:00:00+10:00" }], "last_updated": "2016-01-20t12:40:36+10:00" } }
for of want do, there aren't built in methods, you're going have make own.
you need define function hours , minutes in format want timestamp. can use date
constructor date object out of timestamp, use date.totimestring()
, extract first 2 sections of result joined semicolon.
function gettime(timestamp) { return new date(timestamp).totimestring().split(':').filter(function(v,k){ return k < 2; }).join(':'); }
then matter of looping through timeslots , assigning results of functions original properties. javascript objects pass-by-reference, means can cache object path save keystrokes.
for(var in timeslots) { timeslots[i].booking_start = gettime(timeslots[i].booking_start); timeslots[i].booking_end = gettime(timeslots[i].booking_end); }
here's simple example in action, i've slimmed down , condensed json object save space here.
// slimmed down , condensed object var response = { "bookings": { "group_id": 12306, "name": "public meeting rooms", "url": "http:theurlfeed.from.libcal", "timeslots": [{"room_id": "36615","room_name": "meeting room 2a","booking_label": "mahjong","booking_start": "2016-01-20t10:00:00+10:00","booking_end": "2016-01-20t11:00:00+10:00"}, {"room_id": "36615","room_name": "meeting room 2a","booking_label": "mahjong","booking_start": "2016-01-20t11:00:00+10:00","booking_end": "2016-01-20t12:00:00+10:00"},{"room_id": "36615","room_name": "meeting room 2a","booking_label": "mahjong","booking_start": "2016-01-20t12:00:00+10:00","booking_end": "2016-01-20t13:00:00+10:00"}], "last_updated": "2016-01-20t12:40:36+10:00" } }; // make function, ease of use function formattimes(bookings) { // format timestamps function gettime(timestamp) { return new date(timestamp).totimestring().split(':').filter(function(v,k){ return k < 2; }).join(':'); } // iterate timeslots, replacing start , end values for(var in bookings.timeslots) if(bookings.timeslots.hasownproperty(i)) { var timeslot = bookings.timeslots[i]; timeslot.booking_start = gettime(timeslot.booking_start); timeslot.booking_end = gettime(timeslot.booking_end); } // replace last updated value bookings.last_updated = gettime(bookings.last_updated); } // format times , display result formattimes(response.bookings); document.body.innerhtml = '<pre>' + json.stringify(response.bookings, null, 4) + '</pre>';
Comments
Post a Comment