从foursquare场地终点返回个人开放时间

时间:2014-03-06 10:16:43

标签: javascript foursquare

foursquare api返回以下内容,位于data.response.venue.hours,场地开放时间为:

hours: {
    status: "Closed until Noon",
    isOpen: false
    timeframes: [
        {
            days: "Mon–Wed",
            open: [
                {
                    renderedTime: "Noon–11:00 PM"
                }
            ],
                segments: [ ]
        },
        {
            days: "Thu",
            includesToday: true,
            open: [
                {
                    renderedTime: "Noon–Midnight"
                }
            ]
                segments: [ ]
        },
        {
            days: "Fri–Sat",
            open: [
                {
                    renderedTime: "11:00 AM–1:00 AM"
                }
            ]
                segments: [ ]
        },
        {
            days: "Sun",
            open: [
                {
                    renderedTime: "Noon–10:30 PM"
                }
            ]
                segments: [ ]
        },
    ]
}

一组天数因场地而异,即有些可能有周一,周三,周日,太阳或其他变化,而不是上述。

我希望对这些信息进行排序,以便我可以返回个别日期的开放时间,即自行调用星期一。我的javascript知识不是很好,所以从哪里开始会很好。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

为了获得场地时间,您可以使用场地/ VENUE_ID /小时终点,它具有更加机器友好的结果

  hours: {
    timeframes: [
      {
        days: [
          1
          2
          3
          4
          5
          6
          7
        ],
        includesToday: true,
        open: [
          {
            start: "0600",
            end: "2000"
          }
        ],
        segments: [ ]
      }
    ]
  }

这是一个简化的案例,其中所有7天都具有相同的开放段,但在其他情况下,您应该能够遍历时间帧并获得每天的开放阵列。

var Mon;
if (timeframes[j].days.indexOf(i) != -1) {
  Mon = timeframes[j].open;
}

答案 1 :(得分:0)

我将从一个映射对象开始,描述哪些天与特定的开放时间匹配:

var diff = {
  mon: 'Mon–Wed',
  tue: 'Mon–Wed',
  wed: 'Mon–Wed',
  thu: 'Thu',
  fri: 'Fri-Sat',
  sat: 'Fri-Sat'
};

然后,我将使用filter而不是对数据进行排序,以使用映射对象从数据中提取相关结果:

function getOpeningTimes(day) {
  var arr = hours.timeframes.filter(function (el) {

    // return the match where the value of the property
    // in the mapping object that matches the search equals the
    // days property in the current object in the data.
    return diff[day] === el.days;
  });
  return arr[0].open[0].renderedTime;
}

console.log(getOpeningTimes('mon')); // Noon–11:00 PM

Fiddle