从JSON响应中输出下一个可用日期

时间:2017-11-11 13:34:42

标签: javascript json eventbrite

我正在使用Eventbrite API的JSON响应来显示' next'活动日期。此日期将通过查看当前时间并查找当前时间之后的下一个事件自动计算。

以下是我需要解析的JSON响应:

https://jsfiddle.net/dgc223/k9dbvzoo/

如果我现在正在检查它,我希望从第277行(2017-11-11T11:00:00)返回日期。如果我在几个小时内检查它,我会想要返回350 (2017-12-09T11:00:00)行,因为那是下一个可用的旅行日期。

我当前的脚本(下面)从上面的JSON响应中返回该系列的第一个日期。但是,在考虑当前时间之后,我需要修改它以返回NEXT巡视日期。通过这种方式,通过告诉用户下一个旅行的可用日期,脚本可以提供更多信息。

<script>
  $.getJSON('eventbrite_api2.php', {
    eventid: '35719663475',
    function: 'events'
  }, function(response) {
    var date = new Date(response.start.utc); //this formats the date to local 
    time zone
    date.toString();
    event_start = date.toLocaleString('en-US', {
      weekday: 'long',
      day: 'numeric',
      month: 'long',
      year: 'numeric',
      hour: 'numeric',
      hour12: true,
      timeZone: "America/New_York"
    }); //this formats the date to eastern time zone, and makes some other formatting of the date
    var content = "<h4>" + response.name.text + "</h4><p>The next event starts " + event_start + "</p>" + "<p>" + "<img width=\"350\" src=" + response.logo.original.url + "</img>";
    $("#eventbrite").append(content);
  });
</script>

1 个答案:

答案 0 :(得分:1)

我会过滤掉已经过去的所有事件,然后使用第一个事件,如果有的话。因此处理响应的函数看起来像这样。

function (response) {
  var date = new Date();
  var upcoming = response.events.filter(function (event) {
    // just compare the UTC representation
    var start = new Date(event.start.utc);
    return start > date;
  });
  if (upcoming.length) {
    //next event is upcoming[0]; Do what you want with it
  } else {
    //no events upcoming
  }
}

javascript数组的过滤器函数接受一个测试函数并返回一个新数组,其中只有第二个数组中的元素在传递给测试函数时返回true。