如何在飞镖逻辑中获取每周日期列表

问题描述 投票:1回答:1

[任何人都可以通过选择星期一或其他日期作为工作日的开始时间来获得给定月份中每个星期的日期列表吗?

无法弄清楚抖动中的逻辑(飞镖)

例如:

输入: 月:五月 工作日:星期一

输出:

[
  {
    "week1": [
      "-",
      "-",
      "-",
      "-",
      "2020-05-01",
      "2020-05-02",
      "2020-05-03"
    ]
  },
  {
    "week2": [
      "2020-05-04",
      "2020-05-05",
      "2020-05-06",
      "2020-05-07",
      "2020-05-08",
      "2020-05-09",
      "2020-05-10"
    ]
  },
  {
    "week3": [
      "2020-05-11",
      "2020-05-12",
      "2020-05-13",
      "2020-05-14",
      "2020-05-15",
      "2020-05-16",
      "2020-05-17"
    ]
  },
  {
    "week4": [
      "2020-05-18",
      "2020-05-19",
      "2020-05-20",
      "2020-05-21",
      "2020-05-22",
      "2020-05-23",
      "2020-05-24"
    ]
  },
  {
    "week5": [
      "2020-05-25",
      "2020-05-26",
      "2020-05-27",
      "2020-05-28",
      "2020-05-29",
      "2020-05-30",
      "2020-05-31"
    ]
  }
]
flutter dart
1个回答
0
投票

最后我找到了解决方案。在此处发布以供其他人将来使用

  calculateWeeks(DateTime currentMonth, DateTime previousMonth) {
  List<List<String>> weeks = [];
  currentMonth = DateTime.utc(2020, DateTime.august, 1);
  if (currentMonth == null) {
    currentMonth = DateTime.now();
  }

  int firstDay = 1;
  int lastDay = DateUtils.daysofMonth(currentMonth);
  log('Day from $firstDay - $lastDay');
  DateTime startMonth =
      DateTime.utc(currentMonth.year, currentMonth.month, firstDay);
  DateTime endMonth =
      DateTime.utc(currentMonth.year, currentMonth.month, lastDay);

  DateTime weekStartDates = DateUtils.weekStart(startMonth);
  DateTime weekEndDates = DateUtils.weekEnd(endMonth);
  int daysDiff = weekEndDates.difference(weekStartDates).inDays;
  log('Start week : $weekStartDates');
  log('End   week : $weekEndDates');
  log('Diff       : ${daysDiff}');
  List<String> weekly = [];
  for (int i = 0; i < daysDiff; i++) {
    String date = '';
    DateTime checkdate = weekStartDates.add(Duration(days: i));
    if ((checkdate == startMonth || checkdate.isAfter(startMonth)) &&
        (checkdate == endMonth || checkdate.isBefore(endMonth))) {
      log('weekday : $i - $checkdate : ${checkdate.weekday}');
      date = checkdate.toIso8601String();
    }
    weekly.add(date);
    if (checkdate.weekday == 7 || i == daysDiff - 1) {
      weeks.add(weekly);
      weekly = [];
    }
  }
  log('Weekly Dates :${json.encode(weeks)}');
}
© www.soinside.com 2019 - 2024. All rights reserved.