user517406
user517406

Reputation: 13773

find week ending date of last completed week

For any given date, how would you find the week ending date of the last completed week, if your week runs from Sunday to Saturday?

Upvotes: 15

Views: 19785

Answers (6)

SvenAelterman
SvenAelterman

Reputation: 1662

Here is a .NET method that does it generically:

public static DateTime GetPreviousDayDate(DateTime referenceDate, DayOfWeek day = DayOfWeek.Saturday)
{
    // DayOfWeek: https://learn.microsoft.com/en-us/dotnet/api/system.dayofweek?view=net-5.0
    // Sunday = 0, Monday = 1, ..., Saturday = 6
    // e.g. if today is Wednesday (3), we subtract 4 days to get to the prior Saturday (6)
    // because 3 - 6 = -3 + 7 = 4
    // e.g. if today is Saturday (6), we substract 3 days to get to the prior Wednesday (3)
    // because 6 - 3 = 3

    int DaysToSubtract = (int)referenceDate.DayOfWeek - (int)day;

    // If the number of days to subtract based on the ordinal of the day of the week is negative, add 7 days back
    if (DaysToSubtract < 1) DaysToSubtract += 7;

    return referenceDate.AddDays(DaysToSubtract * -1);
}

Upvotes: 0

G3n1us
G3n1us

Reputation: 26

If you want to specify which day is the end of week, and you don't want to worry about what day the system has defined as the default start of the week, use this method:

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

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

        return dt;
    }

Upvotes: 0

Jim Mischel
Jim Mischel

Reputation: 133950

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

Upvotes: 23

John xyz
John xyz

Reputation: 186

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

To find the end of the previous week, just call:

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

Upvotes: 4

KeithS
KeithS

Reputation: 71565

.NET DateTimes expose a DayOfWeek property. You can leverage that in this case:

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);

Upvotes: 1

Anthony Pegram
Anthony Pegram

Reputation: 126794

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

Upvotes: 2

Related Questions