如何从Javascript或Typescript中的常规日期列表中筛选当前一周的日期?

如何从Javascript或Typescript中的常规日期列表中筛选当前一周的日期?,javascript,date,typescript,Javascript,Date,Typescript,我有一个包含多个日期的数组,从这个数组中,我想返回一个只包含属于当前星期的日期的数组。我怎样才能做到这一点?我建议使用类似的库 您可以通过执行以下操作轻松过滤阵列 var currentDate = moment(); var allDates = [...]; var filtered = allDates.filter(date => moment(date).isSame(currentDate, 'week'); 下面是一个使用的示例 let outOfWeek=new Date

我有一个包含多个日期的数组,从这个数组中,我想返回一个只包含属于当前星期的日期的数组。我怎样才能做到这一点?

我建议使用类似的库

您可以通过执行以下操作轻松过滤阵列

var currentDate = moment();
var allDates = [...];
var filtered = allDates.filter(date => moment(date).isSame(currentDate, 'week');
下面是一个使用的示例

let outOfWeek=new Date();
outOfWeek.setDate(outOfWeek.getDate()+7)
常量日期列表=[
新日期(),
周末
]
const monthDay=new Date().getDate();
const weekDay=新日期().getDay();
const daysToSunday=7-工作日;
const daysFromSunday=工作日;
const setDateToMidnight=(日期)=>{
日期.设定时间(0);;
日期。设置分钟数(0);
日期。设置秒(0);
日期设置毫秒(0);
}
设maxDate=新日期();
maxDate.setDate(月日+日至周日);
setDateToMidnight(maxDate);
让minDate=新日期();
minDate.setDate(从星期日起的星期一至星期日);
setDateToMidnight(minDate);
filteredDates=dateList.filter((日期)=>{
如果(date.getTime()=minDate.getTime()){
返回true;
}否则{
返回false;
}
})
console.log(日期列表);
console.log(filteredDates);

唯一困难的是找到一周的时间框架。要做到这一点,您可以:

函数getWeekDates(){ 让我们现在=新日期(); 让dayOfWeek=now.getDay();//0-6 让numDay=now.getDate(); 开始=新日期(现在);//复制 start.setDate(numDay-dayOfWeek); 设置小时数(0,0,0,0); 让end=新日期(现在);//复制 结束.设置日期(numDay+(7-星期日)); 结束设定小时数(0,0,0,0); 返回[开始,结束]; } 让[start,end]=getWeekDates();
log(start.tolocalString(),end.tolocalString())定义“列表”。。。html、数组、其他?请花点时间通读一遍,日期的格式是什么?@charlietfl,一位Array做一些研究,花点时间。开始getWeek@sissonb我正在与Date classI合作,我很感谢您的回复,但您没有很好地理解我的问题。我需要筛选当前周内的日期。您可以使用
minDate.setHours(0,0,0,0)
在一次通话中将所有时间部分归零。“打字少了很多。”罗布说得很好。当我在这里写示例时,我会尽量详细,我认为在一个名为
setHours
的方法中设置分、秒和毫秒是不可读的。没有这个插件,没有其他方法可以做到这一点?天哪,你真是个天才。我想这正是我想要的。我会做一些测试,然后给你反馈。非常感谢@flpn,我做了一个小的更新,我想这样更清楚。唯一的区别在于EndDate对象,它是下一周的开始,而不是一周的最后一毫秒。也更改了谓词函数,因此它不包括日期,直到该日期不应
end.setDate(numDay+(7-dayOfWeek))
be
end.setDate(numDay+(6-dayOfWeek))
?@flpn,它们将日期对象(d、开始、结束)转换为数字时间戳,可以轻松与
进行比较,
@flpn+将日期对象转换为数字。基本上调用Date.getTime()
let outOfWeek = new Date();
outOfWeek.setDate(outOfWeek.getDate() + 7)

const dateList = [
  new Date(),
  outOfWeek
]
const monthDay = new Date().getDate();
const weekDay = new Date().getDay();
const daysToSunday = 7 - weekDay;
const daysFromSunday = weekDay;

const setDateToMidnight = (date) =>{
  date.setHours(0);
  date.setMinutes(0);
  date.setSeconds(0);
  date.setMilliseconds(0);
}

let maxDate = new Date();
maxDate.setDate(monthDay + daysToSunday);
setDateToMidnight(maxDate);

let minDate = new Date();
minDate.setDate(monthDay - daysFromSunday);
setDateToMidnight(minDate);

filteredDates = dateList.filter((date) => {
  if (date.getTime() < maxDate.getTime() && date.getTime() >= minDate.getTime()) {
    return true;
  } else {
    return false;
  }
})

console.log(dateList);
console.log(filteredDates);