过滤日期范围从对象与日期作为Ruby中的键

时间:2018-05-02 20:03:40

标签: ruby-on-rails ruby

我正在使用AlphaVantage API(https://www.alphavantage.co/documentation/#daily)来获取每日库存数据。遗憾的是,API不提供仅获取特定日期范围的数据的选项。它始终返回过去20年的所有数据。它返回的哈希包含日期作为键:

 "2016-12-08": {
        "1. open": "61.3000",
        "2. high": "61.5800",
        "3. low": "60.8400",
        "4. close": "61.0100",
        "5. volume": "21220753"
    },
    "2016-12-07": {
        "1. open": "60.0100",
        "2. high": "61.3800",
        "3. low": "59.8000",
        "4. close": "61.3700",
        "5. volume": "30808969"
    },
    "2016-12-06": {
        "1. open": "60.4300",
        "2. high": "60.4600",
        "3. low": "59.8000",
        "4. close": "59.9500",
        "5. volume": "19907035"
    },

如何仅选择给定时间范围的条目,例如。 2016-12-01至2016-12-10?我知道我总是会获得完整的数据,并且会对返回的哈希进行过滤。

3 个答案:

答案 0 :(得分:1)

您可以使用SELECT CityHOME.CITY_NAME as HomeCity, CityWork.CITY_NAME as WorkCity FROM TBL_HOME HOME LEFT JOIN TBL_WORK WORK on HOME.PrimaryKey = WORK.ForeignKey LEFT JOIN REF_CITY CityHOME on CityHOME.CITY_ID = HOME.CITY_ID LEFT JOIN REF_CITY CityWork on CityWork.CITY_ID = WORK.CITY_ID ,如下所示:

hash.select { |k, _| Date.parse(k) < Date.parse("2016-12-10") && Date.parse(k) > Date.parse("2016-12-01")}

答案 1 :(得分:0)

由于您已经有哈希,可以尝试使用select:

TBL_WORK

答案 2 :(得分:0)

一种方法是使用Hash#select和范围:

def filter_dates(hash, first, last)
  range = Date.parse(first)..Date.parse(last)
  hash.select { |k, _| range.include?(Date.parse(k)) }
end