如何根据当前时间在数组中查找即将发生的事件

时间:2016-08-08 18:10:14

标签: javascript jquery

我有一系列事件,我希望迭代该数组并根据其开始时间与当前开始时间相比找到下一个即将发生的事件。

基本上,现在说下午3点30分,有些活动从中午12点,下午2点,下午4点,下午5点开始。我希望活动从下午4点开始。

示例数据:

    {
  "cache_time": 1470678992,
  "events": [
    {
      "title": "EVENT TITLE",
      "start_time": "12:00AM",
      "end_time": "12:00AM"
    },
    {
      "title": "EVENT TITLE",
      "start_time": "8:00AM",
      "end_time": "10:00AM"
    },
    {
      "title": "EVENT TITLE",
      "start_time": "10:00AM",
      "end_time": "12:00PM"
    },
    {
      "title": "EVENT TITLE",
      "start_time": "1:00PM",
      "end_time": "2:30PM"
    },
    {
      "title": "EVENT TITLE",
      "start_time": "2:30PM",
      "end_time": "3:00PM"
    },
    {
      "title": "EVENT TITLE",
      "start_time": "3:00PM",
      "end_time": "4:00PM"
    }
  ]
}

修改

到目前为止,我已经做了什么才能参加当前的会议,但是在当前会议未知的情况下我无法参加下一次会议。

    var _this = this;
    var date = new Date();
    var currentHour = date.getHours();
    var currentMins = date.getMinutes();
    var reqStartTime = new Date();

    reqStartTime.setHours(currentHour, currentMins, 0);

    var reqEndTime = new Date(reqStartTime.getTime() + 2 * 60000);

    for (var e in EVENT_DATA.events) {
        var start_time  = EVENT_DATA.events[e].start_24time;
        var end_time    = EVENT_DATA.events[e].end_24time;

        var startTime = new Date();
        var endTime = new Date(); 

        startTime.setHours(start_time.substring(0,2), start_time.substring(3,5), 0);
        endTime.setHours(end_time.substring(0,2), end_time.substring(3,5), 0);

        if ( (reqEndTime > startTime && reqEndTime < endTime) || (reqStartTime > startTime && reqStartTime < endTime) ) {
            return EVENT_DATA.events[e];
        }
    }

1 个答案:

答案 0 :(得分:1)

由于您的start_time是非标准格式,我们需要做的一件事是将其转换为可用值。我们会将其与start_date结合使用,以获得我们的比较价值。

由于我们不能假设事件是有序的,我们也会考虑到这一点。

(function(data) {
  var currentTime = new Date();
  var getStartTime = function(event) { // This function converts the time into a usable format and returns it as a Date object
    try {
      return new Date(event.start_date + ' ' + event.start_time.replace(/(AM|PM)/, ' $1'));
    } catch(ex) { return null; }
  };
  var sortedEvents = jQuery(data.events).sort(function(a, b) {
    return getStartTime(a) > getStartTime(b) ? 1 : -1;
  }).toArray(); // Get an array of sorted events
  for (var i = 0; i < sortedEvents.length; i++) {
    if (getStartTime(sortedEvents[i]) < currentTime) { continue; }
    return sortedEvents[i]; // Starts now or after
  }
  return null; // No matches
})(sample_data);

来自问题的原始样本数据:

"events": [
    {
      "title": "EVENT TITLE",
      "start_time": "12:00AM",
      "end_time": "12:00AM",
      "start_24time": "00:00",
      "end_24time": "00:00",
      "start_date": "July 29, 2016",
      "end_date": "September 03, 2016",
      "display_date": "July 29 - September 03, 2016"
    }, ...
]