我需要一些幫助,因為我在這個問題上苦苦掙扎了一段時間,我試圖過濾本周的日子,不包括今天和昨天,因為我有單獨的堆疊。我只想過濾比昨天更早但在本周之間的日子。其他過濾器是我想要比這周大的天數(從過去 2 周開始)。
所以這是我的代碼:
const filterByDate = (data) => {
const tempStacks = {} as any;
const date = new Date();
const yesterday = new Date(new Date().setDate(date.getDate() - 1));
console.log('yesterday', yesterday.getDate())
const getWeek = (d) => {
const dt: any = new Date(d.getFullYear(),0,1);
return Math.ceil((((d - dt) / 86400000) dt.getDay())/7);
};
const thisWeek = getWeek(date);
console.log('this week', thisWeek)
console.log('test date----', new Date(new Date().setDate(new Date().getDate() - 7)))
tempStacks.today = data.filter(obj => {
return obj.date.getDate() === date.getDate()
&& obj.date.getMonth() === date.getMonth()
&& obj.date.getFullYear() === date.getFullYear()
});
tempStacks.yesterday = data.filter(obj => {
return obj.date.getDate() === yesterday.getDate()
&& obj.date.getMonth() === yesterday.getMonth()
&& obj.date.getFullYear() === yesterday.getFullYear()
});
console.log('tempStacks yesterday', tempStacks.yesterday)
tempStacks.thisWeek = data.filter(obj => {
return getWeek(obj.date) === thisWeek
})
tempStacks.lastTwoWeeks = data.filter(obj => {
return getWeek(obj.date) === thisWeek-1 || getWeek(obj.date) === thisWeek-2
})
return tempStacks;
}
我的代碼存在的問題是,在thisWeek堆疊中,我有這周的所有日子,包括yesterday并且today我希望它們被排除在外,因為我有單獨的堆疊。
有人知道我有這個問題的一個很好的解決方案嗎?
uj5u.com熱心網友回復:
正如@pilchard 建議的那樣,為 2 天前創建一個日期,然后為前一個星期一創建一個日期以獲取第一組日期。
然后獲取之前的星期一以獲取第二組日期。例如
// Return Date for previous Monday or
// same date if date is Monday.
// Returned date is at 00:00:00.000
function priorMonday (date = new Date()) {
return new Date(date.getFullYear(), date.getMonth(),
date.getDate() - (date.getDay() || 7) 1);
}
// Get ranges for filters
let d = new Date();
let data = []; // Put whatever in here
// week2end is yesterday at 00:00:00.000
let week2end = new Date(d.getFullYear(), d.getMonth(), d.getDate() - 1);
// week2start is previous Monday at 00:00:00.000
let week2start = priorMonday(week2end);
// week1start is previous Monday at 00:00:00.000
let week1start = priorMonday(new Date(week2start - 1));
// Show ranges
console.log(`Wk 1 start: ${week1start.toDateString()}`
`\nWk 2 start: ${week2start.toDateString()}`
`\nWk 2 end : ${week2end.toDateString()}`);
// Week 1 dates are greater than or equal to week 1 start,
// and less than week 2 start
let week1 = data.filter(o => o.date >= week1start && o.date < week2start);
// Week 2 dates are greater than or equal to week 2 start
// and less than yesterday (so up to and including 2 days ago)
let week2 = data.filter(o => o.date >= week2start && o.date < week2end);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/532269.html
