Hur filtrerar jag datumen för den aktuella veckan från en allmän datumlista i Javascript eller Typescript?
Jag har en array som innehåller flera datum och, från denna array, vill jag returnera en array som endast innehåller de datum som tillhör den aktuella veckan. Hur kan jag göra detta?
Svar #1
Det enda svåra med detta är att hitta tidsramen för veckan. För att göra det kan du göra:
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());Nu, för att filtrera dem:
function filterDatesByCurrentWeek(dates){
let [start, end] = getWeekDates();
return dates.filter(d => +d >= +start && +d < +end);
}Detta förutsätter att dina datum är datumobjekt. Om de inte är det, behöver du ett sätt att tolka dem och få datumobjektet.
Svar #2
Jag skulle rekommendera att använda ett bibliotek som momentjs.
Du kan enkelt filtrera arrayen genom att göra
var currentDate = moment();
var allDates = [...];
var filtered = allDates.filter(date => moment(date).isSame(currentDate, 'week');
