繁体   English   中英

按日期排序列表 flutter

[英]Sort list by date flutter

我需要按日期对列表进行排序,但只按第一个数字排序。

我从 JSON 20-JAN-23得到这种格式

我正在尝试使用model.data.sort((a, b) => b.time..compareTo(a;time!));

我需要按日期对列表进行排序。

我从 JSON 20-JAN-23得到这种格式

我正在尝试使用model.data.sort((a, b) => b.time..compareTo(a;time!));

但如果年份不同,则仅按天排序。 我需要按完整日期排序。

前任:

20-SEP-20
02-DEC-21
29-JAN-23
12-JUN-20

我的排序是:

02-DEC-21
12-JUN-20
20-SEP-20
29-JAN-23

但我想成为:

12-JUN-20
20-SEP-20
02-DEC-21
29-JAN-23
import 'package:intl/intl.dart';

int sortDates(String a, String b) {
  String formatDate(String s) => s.replaceRange(4, 6, s.substring(4, 6).toLowerCase());
  DateTime parse(String s) => DateFormat("dd-MMM-yy").parse(formatDate(s));
  return parse(a).compareTo(parse(b));
}

...
model.data.sort(sortDates);
...

用这个:

...
int sorterFunction(String a, String b) {
    String formatText(String dateAsString) {
      final date = dateAsString.substring(0,2);
      final month = formatMonth(dateAsString.substring(3,6));
      final year = '20${dateAsString.substring(7)}';
      return '$date-$month-$year';
    }
    String formatMonth(String text) {
      switch (text) {
        case 'JAN': return 'Jan';
        case 'FEB': return 'Feb';
        case 'MAR': return 'Mar';
        case 'APR': return 'Apr';
        case 'MAY': return 'May';
        case 'JUN': return 'Jun';
        case 'JUL': return 'Jul';
        case 'AUG': return 'Aug';
        case 'SEP': return 'Sep';
        case 'OCT': return 'Oct';
        case 'NOV': return 'Nov';
        case 'DEC': return 'Dec';
        default: return 'Jan';
        }
    }

    final dateA = DateFormat('dd-MMM-yy').parse(formatText(a));
    final dateB = DateFormat('dd-MMM-yy').parse(formatText(b));
    return dateA.compareTo(dateB);
}
...
...
model.data.sort(sorterFunction);
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM