Get date of first Monday of the week?

C#.Net

C# Problem Overview


I was wondering if you guys know how to get the date of currents week's monday based on todays date?

i.e 2009-11-03 passed in and 2009-11-02 gets returned back

/M

C# Solutions


Solution 1 - C#

This is what i use (probably not internationalised):

DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
DateTime monday = input.AddDays(delta);

Solution 2 - C#

The Pondium answer can search Forward in some case. If you want only Backward search I think it should be:

DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
if(delta > 0)
    delta -= 7;
DateTime monday = input.AddDays(delta);

Solution 3 - C#

Something like this would work

DateTime dt = DateTime.Now;
while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1); 

I'm sure there is a nicer way tho :)

Solution 4 - C#

public static class DateTimeExtension
{
    public static DateTime GetFirstDayOfWeek(this DateTime date)
    {
        var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
       
        while (date.DayOfWeek != firstDayOfWeek)
        {
            date = date.AddDays(-1);
        }

        return date;
    }
}

International here. I think as extension it can be more useful.

Solution 5 - C#

What about:

CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek

Why don't use native solution?

Solution 6 - C#

var now = System.DateTime.Now;

var result = now.AddDays(-((now.DayOfWeek - System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek + 7) % 7)).Date;

Probably will return you with Monday. Unless you are using a culture where Monday is not the first day of the week.

Solution 7 - C#

Try this:

public DateTime FirstDayOfWeek(DateTime date)
{
    var candidateDate=date;
    while(candidateDate.DayOfWeek!=DayOfWeek.Monday) {
        candidateDate=candidateDate.AddDays(-1);
    }
    return candidateDate;
}

EDIT for completeness: overload for today's date:

public DateTime FirstDayOfCurrentWeek()
{
    return FirstDayOfWeek(DateTime.Today);
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionLasse EdsvikView Question on Stackoverflow
Solution 1 - C#PondidumView Answer on Stackoverflow
Solution 2 - C#MarcoView Answer on Stackoverflow
Solution 3 - C#PaulBView Answer on Stackoverflow
Solution 4 - C#Arif DewiView Answer on Stackoverflow
Solution 5 - C#Gh61View Answer on Stackoverflow
Solution 6 - C#HelloWorldView Answer on Stackoverflow
Solution 7 - C#KonamimanView Answer on Stackoverflow