我有一个对象数组。每个对象都有一个date属性。我正在尝试创建一个函数,如果项目的日期等于今天的日期,我会将每个项目追加到新数组中。
此外,我不确定for循环是否是最有效的方法,但是此列表永远不会超过几百个项目。
我的功能:
todayListItems() {
const todayItems = [];
const todayDate = moment(new Date()).format('dd-mm-YYYY');
for (let i = 0; i < myArray.length; i++) {
const itemDate = moment(myArray[i].date).format('dd-mm-YYYY');
if (itemDate === todayDate) {
todayItems.push(myArray[i]);
}
}
console.log(todayItems);
return todayItems;
}
此函数将运行,但是即使有具有今天日期的项目也不会将任何内容推入数组。
答案 0 :(得分:1)
您格式化错误。 mm
是分钟。格式应为DD-MM-YYYY
,请参见https://momentjs.com/docs/#/displaying/format/
答案 1 :(得分:1)
您可以将Array.filter()
和moment#isSame
与第二个参数一起使用,以将粒度限制为毫秒以外的单位:
function todayListItems(arr) {
return arr.filter(obj => moment().isSame(obj.date, 'day'));
}
todayListItems(myArray);
演示:
function todayListItems(arr) {
return arr.filter(obj => moment().isSame(obj.date, 'day'));
}
const myArray = [
{ date: '2019-10-14T12:10:00Z'},
{ date: new Date() },
{ date: moment().minutes(120).format('YYYY-MM-DDTHH:mm:ss') },
{ date: new Date('2019-10-23T01:00:00') },
];
console.log(todayListItems(myArray));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>