如何按周过滤数据数组 Filter()

Tim*_*ley 2 javascript vue.js

目前正在尝试按周过滤我的数据数组,我已经能够很容易地按天过滤,但是我正在努力处理 x 和 y 之间的日期(例如按周)。

我尝试设置开始日期和结束日期(今天),然后尝试返回小于或等于开始日期和结束日期的日期,但失败了。

数据数组日期格式:dd/mm/yyyy (01/01/2000)

用户将选择使用哪个过滤器(因此 switch() )情况 7 被过滤 7 天。

computed: {
    appointments: function () {

      var today = new Date();
      var dd = String(today.getDate()).padStart(2, '0');
      var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
      var yyyy = today.getFullYear();


      var data = this.$store.state.appointments;

      this.filter1_color = "grey";
      this.filter2_color = "grey";

      switch (this.dateFilter) {
        case 0:
        break;

        case 1:
        console.log("case1: " + today)
        return data.filter(word => word.date == today);

        case 7:

        /// WORKING /// (ex. edit)
        var week = [];

        var today = moment();
        var sevenDaysBefore = today.subtract(7, 'days');

        for (var i = 0; i < data.length; i++) {
          let momentDate = moment(data[i].date, 'DD/MM/YYYY')
          let newDate = momentDate.format("DD/MM/YYYY")
          if (momentDate.isBetween(sevenDaysBefore, moment(), null, '[]')) week.push(data[i]);
        }


        return week
        ///

      }


      return data;
    },
Run Code Online (Sandbox Code Playgroud)

我需要过滤数据以仅显示数组中日期等于过去 7 天日期的项目。

f-C*_*-CJ 5

您可以使用isBetween具有当前日期的 moment js 库的方法。您可以使用 将当前日期减去 7 天subtract(7, 'days')

您可以isBetween在 moment js 库文档中查看有关方法的更多信息。该方法的第三个参数是粒度,在您的情况下似乎应该是“天”

const today = moment();
const sevenDaysBefore = moment().subtract(7, 'days');

console.log('Today is ' + today.format('MMM Do YYYY'));
console.log('Is ' + today.format('MMM Do YYYY') + ' included in the last seven days?');
console.log(today.isBetween(sevenDaysBefore, today, 'day', '[]'));

console.log('Is ' + sevenDaysBefore.format('MMM Do YYYY') + ' included in the last seven days?');
console.log(sevenDaysBefore.isBetween(sevenDaysBefore, today, 'day', '[]'));

const eightDaysBefore = moment().subtract(8, 'days');
console.log('Is ' + eightDaysBefore.format('MMM Do YYYY') + ' included in the last seven days?');
console.log(eightDaysBefore.isBetween(sevenDaysBefore, today, 'day', '[]'));

const oneDayAfter = moment().add(1, 'days');
console.log('Is ' + oneDayAfter.format('MMM Do YYYY') + ' included in the last seven days?');
console.log(oneDayAfter.isBetween(sevenDaysBefore, today, 'day', '[]'));
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
Run Code Online (Sandbox Code Playgroud)