Javascript JSON提要是否可以过滤为仅显示时间戳字符串中的时间?
我正在通过JSONP远程检索外部JSON提要。JSON提要包含大量数据,包括数组中的start_time和end_time变量,这些变量的时间数据编码在“JavaScript内置JSON对象和ISO8601”中,如下所示:Javascript JSON提要是否可以过滤为仅显示时间戳字符串中的时间?,javascript,json,Javascript,Json,我正在通过JSONP远程检索外部JSON提要。JSON提要包含大量数据,包括数组中的start_time和end_time变量,这些变量的时间数据编码在“JavaScript内置JSON对象和ISO8601”中,如下所示: 2016-01-21T13:00:00+10:00 我想把数据放在一个预先格式化的表中(这是有充分理由的),我想删除日期数据,只需将时间保留在值上(即13:00) 是否可以过滤/解析整个JSON数据对象,并将所有这些时间戳数据字符串转换为仅显示时间,然后再开始使用数据(比如
2016-01-21T13:00:00+10:00
我想把数据放在一个预先格式化的表中(这是有充分理由的),我想删除日期数据,只需将时间保留在值上(即13:00)
是否可以过滤/解析整个JSON数据对象,并将所有这些时间戳数据字符串转换为仅显示时间,然后再开始使用数据(比如直接在API提要上运行预成型器)
JSON数据的示例片段:
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 and 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 and 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"
}
}
对于大多数您想要做的事情,没有任何内置的方法,所以您必须自己创建 您需要定义一个函数,以从时间戳中获取所需格式的小时和分钟。您可以使用构造函数从时间戳中获取日期对象,然后使用并提取由分号连接的结果的前两部分
function getTime(timestamp) {
return new Date(timestamp).toTimeString().split(':').filter(function(v,k){
return k < 2;
}).join(':');
}
下面是一个简单的示例,我已经精简并压缩了JSON对象,以节省空间
//精简精简的对象
var响应={
“预订”:{
“组id”:12306,
“名称”:“公共会议室”,
“url”:“http:theurlfeed.from.libcal”,
“时间段”:[{“房间id”:“36615”,“房间名称”:“会议室2A”,“预订标签”:“麻将”,“预订开始”:“2016-01-20T10:00+10:00”,“预订结束”:“2016-01-20T11:00:00+10:00”},{“房间id”:“36615”,“房间名称”:“会议室2A”,“预订标签”:“麻将”,“预订开始”:“2016-01-20T11:00+10:00”,“预订结束”:“2016-01-20T12:00+10:00”,{“房间id”:“36615”,“房间名称”:“会议室2A”,“预订标签”:“麻将”,“预订开始”:“2016-01-20T12:00+10:00”,“预订结束”:“2016-01-20T13:00+10:00”},
“最近更新”:“2016-01-20T12:40:36+10:00”
}
};
//使其成为一种功能,以便于使用
功能设置时间(预订){
//格式化时间戳
函数getTime(时间戳){
返回新日期(时间戳).toTimeString().split(':').filter(函数(v,k){
返回k<2;
})。加入(“:”);
}
//迭代时间段,替换开始值和结束值
for(bookings.timeslot中的var i)if(bookings.timeslot.hasOwnProperty(i)){
var timeslot=预订时间段[i];
timeslot.booking\u start=getTime(timeslot.booking\u start);
timeslot.booking\u end=getTime(timeslot.booking\u end);
}
//替换上次更新的值
bookings.last\u updated=getTime(bookings.last\u updated);
}
//格式化时间并显示结果
形成时间(响应、预订);
document.body.innerHTML=''+JSON.stringify(response.bookings,null,4)+'';
如上所述,您需要自己格式化日期。Javascript没有本机日期格式化程序,但是,您可以使用moment.js来完成这项工作:
//TODO:迭代数组以获取对象
var obj={date_字段:“2016-01-20T15:00:00+10:00”};
obj.Formatted_字段=时刻(obj.date_字段)。格式('HH:mm');
控制台日志(obj);
//TODO:在表格上显示格式化的_字段
不,没有任何东西可以自动处理JSON响应。你必须将它解析成一个对象,然后你可以编写一个Javascript循环,将数据修改成你想要的。啊,是的,很好的ol'getTime方法。我以前用它来为我们这些普通人制作JS定时器/倒计时等可读格式。我运行了code inspector是的,它看起来确实不错。我将把你的建议应用到我通过AJAX远程加载的JSON对象上,并尝试现在就让它工作。谢谢你的帮助。太棒了,很高兴我能提供帮助。嘿@Random Logic,我对代码做了进一步的研究,但遇到了一些新的挑战,感谢你分享了另一种方法。通常不过,我还是尽量减少对第三方JS库的依赖。
for(var i in timeslots) {
timeslots[i].booking_start = getTime(timeslots[i].booking_start);
timeslots[i].booking_end = getTime(timeslots[i].booking_end);
}