检查数组中的每个项目是否都是今天的日期?

时间:2019-10-22 09:44:47

标签: javascript momentjs

我有一个对象数组。每个对象都有一个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;
  }

此函数将运行,但是即使有具有今天日期的项目也不会将任何内容推入数组。

2 个答案:

答案 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>