6 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以moment
像這樣簡(jiǎn)單地使用 的內(nèi)置比較器
this.state.data.filter(item => moment(item.publishedDate,'DD/MM/YYYY').isSameOrAfter(today))

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
構(gòu)造函數(shù)Date不會(huì)接受您當(dāng)前使用的格式,但它會(huì)識(shí)別MM/DD/YYYY格式。此外,filter保留函數(shù)返回 true 的元素,因此您應(yīng)該檢查 是否Date小于或等于當(dāng)前Date。
const today = new Date;
this.state.data = this.state.data.filter(({publishedDate})=>{
const [d, m, y] = publishedDate.split("/");
return new Date(m + "/" + d + "/" + y) <= today;
});

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
使用 moment 的String + Format 初始值設(shè)定項(xiàng)和Is Same Or After:
this.state.data.filter(item => moment(item.publishedDate, 'DD/MM/YYYY').isSameOrAfter())

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
一種可能性是使用輔助函數(shù)notAfterToday
,它接受一個(gè)屬性名稱(chēng)(在我們的例子中'publishedDate'
)并返回一個(gè)函數(shù),該函數(shù)接受具有該屬性名稱(chēng)的對(duì)象并報(bào)告該日期是在當(dāng)前日期之前還是在當(dāng)前日期。
例如,它通過(guò)將 2020 年 12 月 18 日轉(zhuǎn)換為“20201218”,并使用該字符串進(jìn)行比較來(lái)實(shí)現(xiàn)此目的。請(qǐng)注意,這樣做的一個(gè)優(yōu)點(diǎn)是它只調(diào)用一次 Date 構(gòu)造函數(shù),用于初始計(jì)算今天的日期。
const data = [{publishedDate: '18/12/2020', Url: 'http://example.com/1', Title: 'abc'}, {publishedDate: '19/01/2021', Url: 'http://example.com/2', Title: 'def'}, {publishedDate: '07/04/2014', Url: 'http://example.com/3', Title: 'ghi'}, {publishedDate: '19/07/2023', Url: 'http://example.com/4', Title: 'jkl'}, {publishedDate: '05/01/1966', Url: 'http://example.com/5', Title: 'mno'}, {publishedDate: '01/07/2041', Url: 'http://example.com/6', Title: 'pqr'}, {publishedDate: '08/05/2061', Url: 'http://example.com/7', Title: 'stu'}, {publishedDate: '10/08/1999', Url: 'http://example.com/8', Title: 'vwx'}]
const notAfterToday = (prop) => {
const reorg = (date, [d, m, y] = date.split('/')) => y + m + d
const today = new Date()
const compare = today .getFullYear() +
String ((today .getMonth () + 1)) .padStart (2, '0') +
String (today .getDate ()) .padStart (2, '0')
return (d) => compare >= reorg (d [prop])
}
console .log (data .filter (notAfterToday ('publishedDate')))
.as-console-wrapper {max-height: 100% !important; top: 0}

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
在與今天進(jìn)行比較之前,您必須對(duì)日期字符串進(jìn)行一些微調(diào)。你可以試試這個(gè)——
const data = [
{
publishedDate: "19/01/2021",
url: '',
title: 'date1'
},
{
publishedDate: "19/05/2021",
url: '',
title: 'date2'
},
{
publishedDate: "13/01/2020",
url: '',
title: 'date3'
},
{
publishedDate: "16/09/2009",
url: '',
title: 'date4'
},
];
const parseDate = (dateString) => new Date(...dateString.split('/').reverse());
const result = data.filter(item => parseDate(item.publishedDate) <= new Date());
console.log(result);

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
將日期存儲(chǔ)為字符串是一種代碼味道。與將它們存儲(chǔ)為 JS 原生日期格式或 Moment.JS 日期對(duì)象等替代方案相比,比較、存儲(chǔ)和轉(zhuǎn)換它們更加困難。
這是一個(gè)簡(jiǎn)單的示例,說(shuō)明如果您將對(duì)象存儲(chǔ)為日期,您可以如何做到這一點(diǎn)。
請(qǐng)注意,第三個(gè)對(duì)象已被過(guò)濾掉。
const myObject1 = {
publishedDate: new Date("2019-01-01"), // NEW
Url: "whatever",
Title: "sample",
}
const myObject2 = {
publishedDate: new Date("2020-01-01"), // NEW
Url: "whatever",
Title: "sample",
}
const myObject3 = {
publishedDate: new Date("2099-01-01"), // NEW
Url: "whatever",
Title: "sample",
}
const arr = [myObject1, myObject2, myObject3];
const today = new Date();
const filtered = arr.filter((obj) => obj.publishedDate < today);
console.log(filtered);
添加回答
舉報(bào)