是否可以过滤JSON Feed以仅显示时间戳字符串的时间?

时间:2016-01-21 00:17:29

标签: javascript 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"
  }
}

2 个答案:

答案 0 :(得分:1)

对于您想要做的大部分内容,没有任何内置方法,因此您必须自己制作。

您需要定义一个函数,以便从时间戳中获取所需格式的小时和分钟。您可以使用Date构造函数从时间戳中获取日期对象,然后使用Date.toTimeString()并提取分号连接的结果的前两部分。

function getTime(timestamp) {
    return new Date(timestamp).toTimeString().split(':').filter(function(v,k){
        return k < 2;
    }).join(':');
}

然后,只需循环遍历时隙并将函数的结果分配给原始属性。 JavaScript对象是传递引用,这意味着我们可以缓存对象路径以保存一些击键。

for(var i in timeslots) {
    timeslots[i].booking_start = getTime(timeslots[i].booking_start);
    timeslots[i].booking_end   = getTime(timeslots[i].booking_end);
}

这是一个简单的示例,我已经缩小并压缩了JSON对象以节省空间。

&#13;
&#13;
// The slimmed down and 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 it a function, for ease of use
function formatTimes(bookings) {
    // Format the timestamps
    function getTime(timestamp) {
        return new Date(timestamp).toTimeString().split(':').filter(function(v,k){
            return k < 2;
        }).join(':');
    }
    
    // Iterate timeslots, replacing the start and end values
    for(var i 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 the last updated value
    bookings.last_updated = getTime(bookings.last_updated);
}

// Format the times and display the result
formatTimes(response.bookings);
document.body.innerHTML = '<pre>' + JSON.stringify(response.bookings, null, 4) + '</pre>';
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如上所述,您需要自己格式化日期。 Javascript没有原生日期格式化程序,但是,您可以使用moment.js来完成这项工作:http://momentjs.com/

<script src="http://momentjs.com/downloads/moment.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
bool bKeepRunning = true;
while(bKeepRunning){
    for(int x = 0; x < 10; x++){
       StringArray[x] = new string();
       if(isDead){
         bKeepRunning = false;
         break; 
    }
    }
}