【问题标题】:How to filter items consisting within a Date Range (from dateA to dateB) in Flutter/Dart?如何在 Flutter/Dart 中过滤包含在日期范围(从日期到日期)内的项目?
【发布时间】:2022-01-28 13:43:45
【问题描述】:

我正在尝试创建一个过滤器,我需要使用一系列日期进行过滤。

例如。从 2021-05-212021-08-31 。 我得到了dateA = 2021-05-21dateB = 2021-08-31

假设我有一个日期列表和下面的项目列表:

日期格式为yyyy-mm-dd

datesList =

[ "2021-05-07", 
"2021-06-09", //
"2021-05-12", 
"2021-08-12", // 
"2021-04-15", 
"2021-07-08", // 
"2021-05-02",
"2021-06-31", // 
"2021-08-18", // 
"2021-02-09" ] 

itemsList =

[ "Apple", 
"Mango",        // 
"Apple", 
"Pineapple,     // 
"Cinnamon", 
"Apple",        // 
"Mango",
"Banana",       // 
"Orange",       // 
"Orange" ]

注意:这里,对于datesList 中的第一个元素,例如。 "2021-05-07",相应的项目是itemsList 中的第一个项目"Apple"。即两者都具有相同的索引,并且两个列表也具有相同数量的元素。

如何只查找特定日期范围内的项目?

假设我需要从2021-05-21 过滤到2021-08-31

那么我应该只从itemsList 中获得itemList[2]itemList[4]itemList[6]itemList[8]itemList[9] 作为输出。 基本上是["Mango", "Pineapple", "Apple", "Banana", "Orange"]

由于只有这些项目出现在此日期范围内,因此需要过滤。 (dateA = 2021-05-21, dateB = 2021-08-31.)

我什至无法开始,因为我是 Flutter/Dart 的新手。

请建议我继续。

【问题讨论】:

    标签: flutter dart filter mobile-application


    【解决方案1】:

    请参阅 How do I convert a date/time string to a DateTime object in Dart? 了解如何将日期字符串解析为 DateTime 对象。这样,您可以遍历您的列表,将每个解析的 DateTime 与您的开始和结束日期进行比较,然后将相应的项目添加到结果列表中。

    例如:

    import 'package:intl/intl.dart';
    
    /// Returns a list of items that have corresponding dates between [start]
    /// and [end] (inclusive).
    List<String> itemsBetweenDates({
      required List<String> dates,
      required List<String> items,
      required DateTime start,
      required DateTime end,
    }) {
      assert(dates.length == items.length);
    
      var dateFormat = DateFormat('y-MM-dd');
    
      var output = <String>[];
      for (var i = 0; i < dates.length; i += 1) {
        var date = dateFormat.parse(dates[i], true);
        if (date.compareTo(start) >= 0 && date.compareTo(end) <= 0) {
          output.add(items[i]);
        }
      }
      return output;
    }
    
    void main() {
      var startDate = DateTime.utc(2021, 05, 21);
      var endDate = DateTime.utc(2021, 08, 31);
    
      var datesList = [
        "2021-05-07",
        "2021-06-09", //
        "2021-05-12",
        "2021-08-12", //
        "2021-04-15",
        "2021-07-08", //
        "2021-05-02",
        "2021-06-31", //
        "2021-08-18", //
        "2021-02-09",
      ];
    
      var itemsList = [
        "Apple",
        "Mango", //
        "Apple",
        "Pineapple", //
        "Cinnamon",
        "Apple", //
        "Mango",
        "Banana", //
        "Orange", //
        "Orange",
      ];
    
      print(itemsBetweenDates(
          dates: datesList, items: itemsList, start: startDate, end: endDate));
    }
    

    请注意,以上假设开始日期和结束日期包含。例如,如果您希望结束日期是唯一的,请将 date.compareTo(end) &lt;= 0 更改为 date.compareTo(end) &lt; 0

    【讨论】:

    • 非常感谢。它真的很有帮助。 :) #LifeSaver。
    猜你喜欢
    • 2019-03-05
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多