繁体   English   中英

如何从Javascript或Typescript的常规日期列表中过滤当前星期的日期?

[英]How do I filter the dates of the current week from a general date list in Javascript or Typescript?

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

唯一困难的部分是找到一周的时间范围。 为此,您可以执行以下操作:

 function getWeekDates() { let now = new Date(); let dayOfWeek = now.getDay(); //0-6 let numDay = now.getDate(); let start = new Date(now); //copy start.setDate(numDay - dayOfWeek); start.setHours(0, 0, 0, 0); let end = new Date(now); //copy end.setDate(numDay + (7 - dayOfWeek)); end.setHours(0, 0, 0, 0); return [start, end]; } let [start, end] = getWeekDates(); console.log(start.toLocaleString(), end.toLocaleString()); 

现在,要过滤它们:

 function filterDatesByCurrentWeek(dates){ let [start, end] = getWeekDates(); return dates.filter(d => +d >= +start && +d < +end); } 

这是假设您的日期是日期对象。 如果不是,则需要一种解析它们并获取date对象的方法。

这是使用filter的示例。

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);

https://jsfiddle.net/qorb6ruL/5/

我建议使用像momentjs这样的库。

您可以通过执行以下操作轻松过滤数组

var currentDate = moment();
var allDates = [...];
var filtered = allDates.filter(date => moment(date).isSame(currentDate, 'week');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM