在计算数组中按日期范围过滤?

时间:2019-01-24 14:45:03

标签: vue.js

在我的应用程序中,我试图开发一种功能来过滤返回的“报价”数组(如果它们属于使用日期选择器设置的一组日期)。我的日期选择器将值发射到范围对象内的两个属性-这是“ filters.range.startDate”和“ filters.range.endDate”。我阵列中的每个商品都具有“ offer.dates.start”和“ offer.dates.end”属性。

我在我的计算属性中添加了以下语句,该语句不会破坏计算结果,无论日期如何都不会返回任何结果……有人有什么建议吗?

编辑-添加了整个计算属性,并以日期范围语句作为最后条件

computed: {
filteredOffers() {
 let filtered = this.offers.filter(offer => {
    return (offer.island === this.filters.islandFilter || this.filters.islandFilter === 'All') // Island 
       && (offer.starrating === this.filters.starRating || this.filters.starRating === 'All') // Star Rating 
      && (offer.board === this.filters.boardBasis || this.filters.boardBasis === 'All') // Board Basis
      && (offer.duration === this.filters.duration || this.filters.duration === 'All') // Duration 
      && (offer.price.from < this.filters.price) // Price
      && (this.filters.travelby === 'sea' && offer.travel.air === false || this.filters.travelby === 'All') // Sea or Air
  && (this.filters.range.startDate >= offer.dates.start && offer.dates.end <= this.filters.range.endDate) // DATE RANGE!!
      });

if (this.sortby === 'ascending') {
  return filtered.sort((a, b) => {
    return a.price.from - b.price.from;
  })
} else {
  return filtered.sort((a, b) => {
    return b.price.from - a.price.from;
  })
}

} }

1 个答案:

答案 0 :(得分:1)

首先,我将日期对象转换为以毫秒为单位的时间戳,只是在进行比较时避免出现一些格式错误。

let date = new Date();
let timestamp = date.getTime();

在那之后,我想您的逻辑是不正确的,因为您在过滤器上的结束日期应大于报价的结束日期,并且在过滤器上的开始日期应小于报价的开始日期。

this.filters.range.startDate <= offer.dates.start && this.filters.range.endDate >= offer.dates.end