Używam tego kodu z innego pytania:

private bool NthDayOfMonth(DateTime date, DayOfWeek dow, int n){
  int d = date.Day;
  return date.DayOfWeek == dow && (d-1)/7 == (n-1);
}

To działa dobrze. Ale nie sprawdza ostatniego dnia (u mnie to wtedy, gdy n = 5). Jak to zmienić?
Dziękuję.

c#
5
user1230307 25 luty 2012, 10:54

2 odpowiedzi

Najlepsza odpowiedź

Poniższa metoda sprawdza, czy podana data jest ostatnim dniem tygodnia w miesiącu.

private bool IsLastOfMonth(DateTime date)
{
    var oneWeekAfter = date.AddDays(7);
    return oneWeekAfter.Month != date.Month;
}

Więc jest nowa metoda, sprawdza się tylko w poniedziałki

private bool IsLastMonday(DateTime date)
{
    if (date.DayOfWeek != DayOfWeek.Monday) 
        return false; // it is not monday

    // the next monday is...
    var oneWeekAfter = date.AddDays(7);

    // and is it in same month?, if it is, that means its not last monday
    return oneWeekAfter.Month != date.Month;
}
12
arunes 25 luty 2012, 13:41

Weźmy 30 marca,

d = 30,  
(date.DayOfWeek == DayOfWeek.Friday) == true, 
(30-1)=29, 29/7 = 4
4 == (5-1)

Więc to działa

Aby sprawdzić tylko, czy DayOfWeek jest ostatni w miesiącu, możesz użyć

return date.AddDays(7).Month != date.Month;
2
Pavel Krymets 25 luty 2012, 11:43