0

I am trying to create a feature where I can transfer money by scheduling, so for that, I need a recurring option for the month and weak, And the problem that I face is, that if a user chooses the 31st of a month every month doesn't have the 31st, so the transaction should happen in that particular month's end date.

for example: If I start recurring date is 31st May 2022 no of transactions: 3 Current Output: Dates of transactions => 1st July 2022, 31st July 2022, 31st August 2022, Correct Output: 30th June 2022, 31st July 2022, 31st August 2022,

Riwen
  • 4,734
  • 2
  • 19
  • 31
  • 2
    Does this answer your question? [How to find last day of month?](https://stackoverflow.com/questions/14814941/how-to-find-last-day-of-month) – Riwen May 26 '22 at 09:37

1 Answers1

0

Maybe something like I proposed here:

With lastDayOfMonth you could potentially do something like

extension AddMonth on DateTime {
 DateTime addMonths([int amount = 1]) {
   final plusXMonths = DateTime(year, month + amount, day);
   final xMonthsAhead = DateTime(year, month + amount);
   if (xMonthsAhead.lastDayOfMonth.compareTo(plusXMonths).isNegative) {
     return xMonthsAhead.lastDayOfMonth;
   } else {
     return plusXMonths;
   }
 }
}

This proposition is based on this code that I created a PR for:

extension DateTimeLastFirstDay on DateTime {
  /// Returns the Monday of this week
  DateTime get firstDayOfWeek =>
      isUtc ? DateTime.utc(year, month, day + 1 - weekday) : DateTime(year, month, day + 1 - weekday);

  /// Returns the Sunday of this week
  DateTime get lastDayOfWeek =>
      isUtc ? DateTime.utc(year, month, day + 7 - weekday) : DateTime(year, month, day + 7 - weekday);

  /// Returns the first day of this month
  DateTime get firstDayOfMonth => isUtc ? DateTime.utc(year, month, 1) : DateTime(year, month, 1);

  /// Returns the last day of this month (considers leap years)
  DateTime get lastDayOfMonth => isUtc ? DateTime.utc(year, month + 1, 0) : DateTime(year, month + 1, 0);

  /// Returns the first day of this year
  DateTime get firstDayOfYear => isUtc ? DateTime.utc(year, 1, 1) : DateTime(year, 1, 1);

  /// Returns the last day of this year
  DateTime get lastDayOfYear => isUtc ? DateTime.utc(year, 12, 31) : DateTime(year, 12, 31);
}

Using the time package you could create a similar code for weeks.

FMorschel
  • 799
  • 5
  • 18