Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON提要是否可以过滤为仅显示时间戳字符串中的时间?_Javascript_Json - Fatal编程技术网

Javascript JSON提要是否可以过滤为仅显示时间戳字符串中的时间?

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数据对象,并将所有这些时间戳数据字符串转换为仅显示时间,然后再开始使用数据(比如

我正在通过JSONP远程检索外部JSON提要。JSON提要包含大量数据,包括数组中的start_time和end_time变量,这些变量的时间数据编码在“JavaScript内置JSON对象和ISO8601”中,如下所示:

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);
}