weekStart function

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

Returns the first 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(weekStart(date: moonLanding) == DateTime(1969, 7, 14));
assert(weekStart(date: moonLanding).weekday == DateTime.monday)

In accordance with ISO 8601 a week starts with Monday. By default the week will start with Monday unless isMondayStartOfWeek is set to false then week starts with Sunday.

assert(weekStart(date: moonLanding, isMondayStartOfWeek: false) ==
       DateTime(1969, 7, 20),);
assert(
    weekStart(
          date: moonLanding,
          isMondayStartOfWeek: false,
        ).weekday ==
        DateTime.sunday,
  );

Implementation

DateTime weekStart({DateTime? date, bool isMondayStartOfWeek = true}) {
  date = date?.toLocal() ?? DateTime.now().toLocal();
  var startOfWeek = DateTime(date.year, date.month, date.day);
  var weekDay =
      isMondayStartOfWeek ? startOfWeek.weekday : 1 + startOfWeek.weekday % 7;
  startOfWeek = startOfWeek.subtract(
    Duration(
      days: weekDay - 1,
    ),
  );

  return startOfWeek;
}