Javascript 如何按周筛选数据数组筛选器()

Javascript 如何按周筛选数据数组筛选器(),javascript,vue.js,Javascript,Vue.js,目前,我正在尝试按周筛选数据数组,我可以很容易地按天筛选,但我很难处理x和y之间的日期(例如按周) 我尝试设置开始日期和结束日期(今天),然后尝试返回小于或等于开始日期和结束日期的日期,但失败 数据数组日期格式:dd/mm/yyyy(2000年1月1日) 用户将选择要使用的过滤器(因此开关())情况7将按7天过滤 computed: { appointments: function () { var today = new Date(); var dd = St

目前,我正在尝试按周筛选数据数组,我可以很容易地按天筛选,但我很难处理x和y之间的日期(例如按周)

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

数据数组日期格式:dd/mm/yyyy(2000年1月1日)

用户将选择要使用的过滤器(因此开关())情况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;
    },
计算:{
任命:职能(){
var today=新日期();
var dd=String(today.getDate()).padStart(2,'0');
var mm=String(today.getMonth()+1).padStart(2,'0');//一月是0!
var yyyy=today.getFullYear();
var data=此。$store.state.appointments;
该过滤器1\u color=“灰色”;
this.filter2_color=“灰色”;
开关(此.dateFilter){
案例0:
打破
案例1:
console.log(“案例1:+今天)
返回data.filter(word=>word.date==today);
案例7:
///工作//(例如编辑)
风险值周=[];
var today=时刻();
var sevenDaysBefore=今天。减去(7,‘天’);
对于(变量i=0;i

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

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

您可以在MomentJS库文档中查看更多关于该方法的信息。该方法的第三个参数是粒度,在您的例子中,它似乎应该是“天”

const today=moment();
const sevenDaysBefore=矩().减去(7,‘天’);
console.log('Today is'+Today.format('MMM Do YYYY');
console.log('Is'+今日.format('MMM Do YYYY')+'包括在过去七天内?);
log(today.isBetween(七天前,今天,'day','[]);
console.log('Is'+sevenDaysBefore.format('MMM Do YYYY')+'包括在过去七天内?');
log(sevenDaysBefore.isBetween(sevenDaysBefore,今天,'day','[]);
const eightDaysBefore=力矩()。减去(8,‘天’);
console.log('Is'+eightdaysbfore.format('MMM Do YYYY')+'包括在过去七天内?');
log(eightDaysBefore.isBetween(sevenDaysBefore,今天,'day','[]);
const oneDayAfter=矩()。添加(1,'天');
console.log('Is'+oneDayAfter.format('MMM Do YYYY')+'包含在过去七天中?');
console.log(oneDayAfter.isBetween(七天前,今天,'day','[]);

如果您不想或不能使用像
moment.js
这样的库,也不介意使用带有某些限制的特殊实现:

注意

我建议使用库来处理
Date
对象,尤其是在将字符串解析为日期时。手工操作可能会出现太多问题。如果可能,请使用@f-CJ的答案

这些部分允许您从字符串创建
Date
对象。但是,生成的
Date
始终转换为本地时间,并且字符串需要具有特定格式(您在问题中显示的格式)。如果您需要对UTC的支持,这将不起作用。此外,它不能用于解析具有ISO格式的日期字符串

const OFFSET_TO_UTC=new Date().getTimezoneOffset();
函数parseDateString(日期字符串,sep){
var parts=dateString.split(sep);
返回parts.map(n=>Number(n));
}
功能本地化日期(模式、部件){
返回模式。减少((acc、pat、i)=>{
开关(pat){
案例“d”:
返回Object.assign(acc,{day:parts[i]});
案例“m”:
返回Object.assign(acc,{month:parts[i]});
案例“y”:
返回Object.assign(acc,{year:parts[i]});
违约:
返回acc;
}
}, {});
}
函数toDate(本地化){
返回新日期(
年,
1月-1日,
今天,
0,0-偏移到协调世界时,0);
}
函数parseDate(模式、sep、日期字符串){
returntodate(localizeDate(pattern,parseDateString(dateString,sep));
}
//试试看:
const dStringUS='2019年4月4日';//mm/dd/yyyy
const dStringDE='2019年4月4日';//dd/mm/yyyy
const dateUS=parseDate(['m','d','y'],'/',dStringUS);
const dateDE=parseDate(['d','m','y'],'.','dStringDE);
console.log(dateUS);

console.log(dateDE)
你能使用像moment js这样的库吗?@f-CJ我能,我刚安装了它,它看起来很方便-但仍然需要找到解决方案。是的。你需要得到结果,这周或过去7天内的所有约会吗?@f-CJ最近7天是我试图做的。如果OP不能使用 moment.js
。但是,我们投票并推荐了您的答案。@f-CJ谢谢您。它基本上得到了我需要的东西,但我在实现它时遇到了困难。我设置了一个for循环来过滤它们(请参阅我在///EDIT//-之间更新的代码,但得到
类型错误:e[I].date.isBetween不是一个函数
,当它放在自己的if语句中时会让人困惑。我是不是想用很难的方法来实现它?@TimRowley你必须解析
date
才能将它转换成
isBetween
是一个矩方法。可能只是使用
矩(data.date[I],'DD/MM/yyyyy'))
你很好,但请检查文档,我的意思是
时刻(数据[I].date,'DD/MM/YYYY')
@f-CJ很棒-谢谢你,现在它变得更有意义了。我现在已经进入了工作状态,非常棒