Reputation: 13773
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
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
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
Reputation: 133950
DateTime StartOfWeek = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek);
DateTime EndOfLastWeek = StartOfWeek.AddDays(-1);
Upvotes: 23
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
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
Reputation: 126794
DateTime givenDate; // = ...
int daysToOffset = ((int)givenDate.DayOfWeek + 1) * -1;
DateTime lastDayOfLastCompletedWeek = givenDate.AddDays(daysToOffset);
Upvotes: 2