getAll42DaysIn1Month static method

List<DateTime> getAll42DaysIn1Month({
  1. required List<DateTime> month,
  2. WeekStartsFrom weekStartsFrom = WeekStartsFrom.sunday,
})

This getAll42DaysIn1Month function will return all the 42 days in a m

Implementation

static List<DateTime> getAll42DaysIn1Month({
  required List<DateTime> month,
  WeekStartsFrom weekStartsFrom = WeekStartsFrom.sunday,
}) {
  List<DateTime> aMonthDaysList = month;
  DateTime firstDayOfaMonth = aMonthDaysList.first;

  ///For finding first Disabled Day
  late DateTime firstDisableDay;
  int weekSelectedIndex = (WeekStartsFrom.values.indexOf(weekStartsFrom) + 1);
  firstDisableDay = firstDayOfaMonth.subtract(
    ///Adding +7 to [firstDayOfaMonth.weekday]
    ///to avoid -ve result
    Duration(days: ((firstDayOfaMonth.weekday + 7) - weekSelectedIndex) % 7),
  );

  /* -----old-----
  // if (weekStartsFrom == WeekStartsFrom.monday) {
  //   ///Starts week with [Monday]
  //   firstDisableDay = firstDayOfaMonth
  //       .subtract(Duration(days: firstDayOfaMonth.weekday - 1));
  // } else if (weekStartsFrom == WeekStartsFrom.sunday) {
  //   ///Starts week with [Sunday]
  //   if (firstDayOfaMonth.weekday == 7) {
  //     firstDisableDay = firstDayOfaMonth;
  //   } else {
  //     firstDisableDay =
  //         firstDayOfaMonth.subtract(Duration(days: firstDayOfaMonth.weekday));
  //   }
  // } else if (weekStartsFrom == WeekStartsFrom.saturday) {
  //   ///Starts week with [Saturday]
  //   if (firstDayOfaMonth.weekday == 6) {
  //     firstDisableDay = firstDayOfaMonth;
  //   } else if (firstDayOfaMonth.weekday == 7) {
  //     firstDisableDay = firstDayOfaMonth.subtract(const Duration(days: 1));
  //   } else {
  //     firstDisableDay = firstDayOfaMonth
  //         .subtract(Duration(days: firstDayOfaMonth.weekday + 1));
  //   }
  // }
  */

  DateTime lastDayOfaMonth = aMonthDaysList.last;

  ///Algorithm to find Disabled Days
  List<DateTime> firstDisabledToLastDayOfMonth =
      getDaysInBeteween(startDate: firstDisableDay, endDate: lastDayOfaMonth);
  int lastlength = firstDisabledToLastDayOfMonth.length;
  int disabledDays = 42 - lastlength;

  ///not used
  // while (lastlength % 7 != 0) {
  //   lastlength++;
  //   disabledDays++;
  // }

  ///To find the last Disabled Days of the month
  DateTime lastDisabledDay =
      lastDayOfaMonth.add(Duration(days: disabledDays));

  ///!geting all 42 days
  List<DateTime> all42DaysOfMonth =
      getDaysInBeteween(startDate: firstDisableDay, endDate: lastDisabledDay);
  return all42DaysOfMonth;
}