代码之家  ›  专栏  ›  技术社区  ›  Bomber

筛选对象键,介于日期之间

  •  0
  • Bomber  · 技术社区  · 6 年前

    我正在尝试测试日期范围之间的日期,使用 Moment

    const startDate = new Date(dates[0].year, dates[0].day, dates[0].month),
      endDate = new Date(
        dates[lastItemIndex - 1].year,
        dates[lastItemIndex - 1].day,
        dates[lastItemIndex - 1].month
      );
    newEvents = Object.keys(events).filter(key => {
      moment()
        .range(startDate, endDate)
        .contains(moment(key).toDate());
    });
    

    我的 events 对象是:

    {
      2018-09-11: {
        dots: Array(4),
        disabled: false,
        selected: true,
        selectedColor: "#00CCCB",
        customStyles: {…}
      }
      2018-09-12: {
        dots: Array(2),
        disabled: false,
        selected: true,
        selectedColor: "#00CCCB",
        customStyles: {…}
      }
      2018-09-13: {
        dots: Array(2),
        disabled: false,
        selected: true,
        selectedColor: "#00CCCB",
        customStyles: {…}
      }
      2018-09-14: {
        dots: Array(1),
        disabled: false,
        selected: true,
        selectedColor: "#00CCCB",
        customStyles: {…}
      }
    }
    

    如何使用日期范围筛选对象键?

    1 回复  |  直到 6 年前
        1
  •  0
  •   rmn    6 年前

    您的代码很好,但是它不会在任何地方设置筛选的事件。您可以修改代码以设置新事件,例如 newEvents[key] = events[key] ,或者您可以使用 reduce 这样地。

    const dateRange = moment().range(startDate, endDate),
    newEvents = Object.keys(events).reduce((output, dateString) => {
        dateRange.contains(moment(dateString).toDate()) && (output[dateString] = events[dateString])
        return output
    }, {})
    

    请注意,我已经搬了 dateRange 为了提高效率,这是不必要的。而且,我没有改变 日期范围 逻辑。但是这里不需要momentjs,就像@abhay在评论中所说的,您可以简单地使用时间戳。