提问者:小点点

过滤两个日期之间的JSON数据


我有返回给我的JSON数据,我试图在两个日期之间过滤数据,结果不是很好。 代码在这里,您看到的注释掉的内容是我已经尝试过但没有效果的(日期格式是dd-MM-yyyy,如果您想知道的话)。

let data = [
    { date : "06-06-2020", toll:1, Province: "Ontario" },
    { date : "06-06-2020", toll:10, Province: "Alberta" },
    { date : "07-06-2020", toll:2, Province: "Ontario" },
    { date : "08-06-2020", toll:2, Province: "Alberta" },
    { date : "09-06-2020", toll:15, Province: "Alberta" },
    { date : "08-06-2020", toll:18, Province: "Ontario" },
    { date : "07-06-2020", toll:11, Province: "Nova Scotia" },
    { date : "07-06-2020", toll:1, Province: "Ontario" },
    { date : "10-06-2020", toll:10, Province: "Manitoba" },
    { date : "11-06-2020", toll:9, Province: "Manitoba" },
    { date : "11-06-2020", toll:3, Province: "Ontario" },
    { date : "07-06-2020", toll:89, Province: "Manitoba" },
    { date : "06-06-2020", toll:90, Province: "Ontario" },
    { date : "06-06-2020", toll:45, Province: "Nova Scotia" },
    { date : "13-06-2020", toll:55, Province: "Ontario" },
    { date : "13-06-2020", toll:1, Province: "Ontario" },
    { date : "13-06-2020", toll:17, Province: "Ontario" },
    { date : "12-06-2020", toll:2, Province: "Nova Scotia" },
    { date : "08-06-2020", toll:8, Province: "Ontario" },
    { date : "08-06-2020", toll:9, Province: "Newfoundland " },
    { date : "06-06-2020", toll:11, Province: "Newfoundland " },
    { date : "12-06-2020", toll:100, Province: "Ontario" },
    { date : "06-06-2020", toll:13, Province: "Ontario" }
];

function GetData(){
    let startDate, endDate;
        startDate = new Date("03-06-2020");
        endDate = new Date("13-06-2020");

    console.log(data.filter(f => f.Province == "Ontario"));

    //let betweenDate = data.filter(f => {
    //    let date = new Date(f.date);
    //    return (f.date >= startDate && f.date <= endDate && f.Province == "Ontario");
    //});
    //
    //let betweenDate = data.filter(f => {
    //    return (f.date >= startDate && f.date <= endDate && f.Province == "Ontario");
    //});

    //console.log(betweenDate);
}

GetData();

共1个答案

匿名用户

“日期格式是dd-MM-yyyy,如果你想知道”这就是问题所在。 新日期不知道您正在使用该格式。 下面,我添加了一个方法,将其转换为yy-MM-dd

您还需要比较您创建的date变量,而不是f.date:

null

// Minified, but same data as yours
let data = [{date:"06-06-2020",toll:1,Province:"Ontario"},{date:"06-06-2020",toll:10,Province:"Alberta"},{date:"07-06-2020",toll:2,Province:"Ontario"},{date:"08-06-2020",toll:2,Province:"Alberta"},{date:"09-06-2020",toll:15,Province:"Alberta"},{date:"08-06-2020",toll:18,Province:"Ontario"},{date:"07-06-2020",toll:11,Province:"Nova Scotia"},{date:"07-06-2020",toll:1,Province:"Ontario"},{date:"10-06-2020",toll:10,Province:"Manitoba"},{date:"11-06-2020",toll:9,Province:"Manitoba"},{date:"11-06-2020",toll:3,Province:"Ontario"},{date:"07-06-2020",toll:89,Province:"Manitoba"},{date:"06-06-2020",toll:90,Province:"Ontario"},{date:"06-06-2020",toll:45,Province:"Nova Scotia"},{date:"13-06-2020",toll:55,Province:"Ontario"},{date:"13-06-2020",toll:1,Province:"Ontario"},{date:"13-06-2020",toll:17,Province:"Ontario"},{date:"12-06-2020",toll:2,Province:"Nova Scotia"},{date:"08-06-2020",toll:8,Province:"Ontario"},{date:"08-06-2020",toll:9,Province:"Newfoundland "},{date:"06-06-2020",toll:11,Province:"Newfoundland "},{date:"12-06-2020",toll:100,Province:"Ontario"},{date:"06-06-2020",toll:13,Province:"Ontario"}];

function datefromDDMMYYFormat(str) {
  return new Date(str.split('-').reverse().join('-'));
}

const startDate = datefromDDMMYYFormat("03-06-2020");
const endDate = datefromDDMMYYFormat("13-06-2020");

const betweenDate = data.filter(f => {
  const date = datefromDDMMYYFormat(f.date);
  return (date >= startDate && date <= endDate && f.Province == "Ontario");
});

console.log(betweenDate);