日曜始まりと月曜始まりは確認、火曜日始まり以降は未確認。
コメントで指摘いただいているとおり次のコードには問題があります。
利用者の責任において、という前提ですが、検討される場合はコメントのコードから始めるとよいと思います。指摘いただいた方、ありがとうございます。
public static class DateTimeExtension
{
/// <summary>
/// 週の最初の曜日を指定して開始日を返す
/// </summary>
/// <param name="source"></param>
/// <param name="start">週の最初の曜日</param>
/// <returns></returns>
public static DateTime FirstDayOfWeek(this DateTime source, DayOfWeek start)
{
if (start == DayOfWeek.Sunday)
{
return source.AddDays(DayOfWeek.Sunday - source.DayOfWeek);
}
else
{
var d = start - source.DayOfWeek;
return source.AddDays((d > 0) ? d - 7 : d); // MAGIC
}
}
/// <summary>
/// 週の最初の曜日を指定して最終日を返す
/// </summary>
/// <param name="source"></param>
/// <param name="start">週の最初の曜日</param>
/// <returns></returns>
public static DateTime LastDayOfWeek(this DateTime source, DayOfWeek start)
{
if (start == DayOfWeek.Sunday)
{
return source.AddDays(DayOfWeek.Saturday - source.DayOfWeek);
}
else
{
var d = start - source.DayOfWeek;
return source.AddDays((d == 1) ? 0 : 6 + d); // MAGIC
}
}
}