weekEnd function

DateTime weekEnd({
  1. DateTime? date,
  2. bool isMondayStartOfWeek = true,
})

Returns the last day of the week in which date is present. If date is not provided,the current day DateTime.now() is considered.

var moonLanding = DateTime.parse("1969-07-20 20:18:04Z");
assert(weekEnd(date: moonLanding) == DateTime(1969, 7, 20, 23, 59, 59, 999));
assert(weekEnd(date: moonLanding).weekday == DateTime.sunday)

In accordance with ISO 8601 a week ends with Sunday. By default the week will end with Sunday unless isMondayStartOfWeek is set to false then week ends with Saturday.

assert(weekEnd(date: moonLanding, isMondayStartOfWeek: false) ==
       DateTime(1969, 7, 26, 23, 59, 59, 999),);
assert(weekEnd(date: moonLanding, isMondayStartOfWeek: false).weekday ==
       DateTime.saturday,)

Implementation

DateTime weekEnd({DateTime? date, bool isMondayStartOfWeek = true}) {
  date = date?.toLocal() ?? DateTime.now().toLocal();
  var endOFWeek =
      DateTime(date.year, date.month, date.day, 23, 59, 59, 999, 999);

  var weekDay =
      isMondayStartOfWeek ? endOFWeek.weekday : 1 + endOFWeek.weekday % 7;
  endOFWeek = endOFWeek.add(
    Duration(
      days: 7 - weekDay,
    ),
  );

  return endOFWeek;
}