Найти дату окончания недели последней завершенной недели

В любой заданный день, как бы вы нашли дату окончания недели последней завершенной недели, если ваша неделя работает с воскресенья по субботу?

Ответ 1

DateTime StartOfWeek = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek);
DateTime EndOfLastWeek = StartOfWeek.AddDays(-1);

Ответ 2

DateTime givenDate; // = ...
int daysToOffset = ((int)givenDate.DayOfWeek + 1) * -1;
DateTime lastDayOfLastCompletedWeek = givenDate.AddDays(daysToOffset);

Ответ 3

.NET DateTimes выставляет свойство DayOfWeek. Вы можете использовать это в этом случае:

var currDay = DateTime.Today.DayOfWeek;
//currday is now an enumeration with Sunday=0, Saturday=6
//We can cast that to a number and subtract to get to the previous Saturday
var EndOfLastWeek = DateTime.Today.AddDays(((int)currDay+1)*-1);

Ответ 4

    public static DateTime EndOfWeek(DateTime dateTime)
    {
        DateTime start = StartOfWeek(dateTime);

        return start.AddDays(6);
    }

    public static DateTime StartOfWeek(DateTime dateTime)
    {
        int days = dateTime.DayOfWeek - DayOfWeek.Monday; 

        if (days < 0) 
            days += 7;

        return dateTime.AddDays(-1 * days).Date;
    }

Чтобы найти конец предыдущей недели, просто позвоните:

    DateTime endPrevWeek = StartOfWeek(DateTime.Today).AddDays(-1);

Ответ 5

Если вы хотите указать, какой день - конец недели, и вы не хотите беспокоиться о том, в какой день система определилась как начало недели по умолчанию, используйте этот метод:

private static DateTime GetPreviousSpecifiedDayOfWeek(DateTime dt, DayOfWeek day)
    {
        if (dt.DayOfWeek == day)
        {
            return dt;
        }

        while (dt.DayOfWeek != day)
        {
            dt = dt.AddDays(-1);
        }

        return dt;
    }