weekStart function
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;
}