Получить дату первого понедельника недели? [дубликат]



этот вопрос уже есть ответ здесь:




  • Как я могу получить дату и время для начала недели?

    26 ответов



Мне было интересно, Знаете ли вы, ребята, как получить дату понедельника текущей недели на основе сегодняшней даты?



т. е. 2009-11-03 прошло и 2009-11-02 возвращается обратно



/M

439   7  

7 ответов:

Это то, что я использую (вероятно, не интернационализирована):

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

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

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

что-то вроде этого будет работать

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

Я уверен, что есть более хороший способ tho :)

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

здесь Международный. Я думаю, что в качестве расширения это может быть более полезным.

о:

CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek

почему не использовать собственное решение?

var now = System.DateTime.Now;

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

вероятно, вернет вас с понедельника. Если вы не используете культуру, где понедельник не является первым днем недели.

попробуйте это:

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

EDIT для полноты: перегрузка на сегодняшнюю дату:

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

Comments

    Ничего не найдено.