reactjs 根据日期范围筛选对象数组

k4ymrczo  于 2023-05-22  发布在  React
关注(0)|答案(2)|浏览(157)

这道题很容易,但我还是不会做。我有一个对象数组,让我们这样说:

const array = [{id:1,created_at: 2022-03-14T16:40:10.000000Z}, {id:2, created_at:2022-03-15T16:40:10.000000Z}

我想使用moment.js过滤元素,只返回创建日期为今天的元素。
我想达到的是这样的:

const filtered = array.filter((item)=> item.created_at >= startOfToday && item.created_at <= endOfToday

过滤后的结果如下所示:[0]{id:2, created_at:2022-03-15T16:40:10.000000Z}
提前感谢任何提示/答案。

jchrr9hc

jchrr9hc1#

你可以使用statOfendOf来使你的过滤器工作吗?

const filtered = array.filter(item => {
  const createdAt = moment(item.created_at)
  const startOfToday = moment().startOf('day')
  const endOfToday = moment().endOf('day')
  return createdAt.isBetween(startOfToday, endOfToday)
})
pxiryf3j

pxiryf3j2#

纯Vanilla JavaScript解决方案

let arr = [
  { name: "Iron Man", released_on: "2002-08-21T00:00:00.000Z" },
  { name: "Captain Amoos", released_on: "2008-08-21T00:00:00.000Z" },
  { name: "Amoos John Wick", released_on: "2014-08-21T00:00:00.000Z" },
  { name: "James Bond", released_on: "2021-08-21T00:00:00.000Z" },
  { name: "Loin King", released_on: "2022-08-21T00:00:00.000Z" },
];

let fromDate = "2004-01-01";
let toDate = "2020-11-22";

const filteredData = (data, key, startDate, endDate) => {     
     startDate = new Date(startDate).getTime();
     endDate = new Date(endDate).getTime();
  
  return data.filter( d => {
    let time = new Date(d[key]).getTime();
    return ( startDate < time && time < endDate )
  });
}

console.log(
  filteredData(arr, "released_on", fromDate, toDate)
);

相关问题