Массивы фильтров флаттера, которые приходят между 2 днями

#flutter #dart

Вопрос:

У меня есть 2 списка данных. Из первого списка я могу найти свои 2 даты и время.

Первый список данных выглядит следующим образом

 "data1": [
        {

            "tripType": "active",
            "dateStart": "2021-05-31T03:02:38.000Z",
            "dateEnd": "2021-05-31T03:51:33.000Z",
            "start": {
                "lon": 66.975478,
                "lat": 24.949758,
            },
            "end": {
                "lon": 67.036706,
                "lat": 24.827635,
            }
         }];
 

Во втором списке у меня есть несколько массивов, в которых указаны дата и время. Я хочу отфильтровать этот список и показать только те массивы, дата и время которых находятся между временем начала и окончания моих первых данных.

Мой второй список выглядит так

 "data2": [
    {
        "id": "3cec02d7-4938-418a-bcdd-c6043154a966",
        "eventDate": "2021-06-01T15:54:01.000Z",
        "creationDate": "2021-06-01T15:54:06.000Z",
        "modifiedDate": "2021-06-01T15:54:06.000Z",
        "eventClass": "overspeedevent",
        "eventType": "start",

    },
    {
        "id": "3cec02d7-4938-418a-bcdd-c6043154a966",
        "eventDate": "2021-07-01T13:54:01.000Z",
        "creationDate": "2021-06-01T13:54:06.000Z",
        "modifiedDate": "2021-06-01T13:54:06.000Z",
        "eventClass": "overspeedevent",
        "eventType": "end",

    },
    {
        "id": "3cec02d7-4938-418a-bcdd-c6043154a966",
        "eventDate": "2021-06-01T15:54:01.000Z",
        "creationDate": "2021-06-01T15:54:06.000Z",
        "modifiedDate": "2021-06-01T15:54:06.000Z",
        "eventClass": "overspeedevent",
        "eventType": "start",

    }];
    
 

Вы можете видеть в данных 1, которые у меня есть dateStart , и dateEnd что мне нужно, так это найти данные 2 между этими датами в данных 2, которые у меня есть eventDate , мне нужно показать или отфильтровать этот массив и показать только те массивы, которые eventDate находятся между dateStart и dateEnd

Ответ №1:

вы можете выполнить итерацию по датам2 и проверить дату с помощью метода compareTo даты после преобразования ее в дату

  var startDate = DateTime.parse(data1[0]["dateStart"].toString());
 var endDate = DateTime.parse(data1[0]["dateEnd"].toString());
 for(var item in data2){
   var itemDate = DateTime.parse(item["eventDate"].toString());

   if(itemDate.compareTo(startDate) > 0 amp;amp; itemDate.compareTo(endDate) < 0) {
     print(item["id"]);
   }
 }