Hallo sitze gerade an dem Problem, den letzten Tag der letzten X Monate zu finden. Meine Idee war es, den ersten Tag zu finden und davon dann einen Tag abzuziehen. Klappt aber nicht wirklich, weil statt dem 31.12.2009, der 30.12.2009 rauskommt. Seht Ihr den Fehler?
public static List<DateTime> GetLastDayOfPreviousMonths(int howManyMonthsBack)
{
DateTime now = DateTime.Now;
int month = now.Month;
int year = now.Year;
var firstDay = new DateTime();
var dateList = new List<DateTime>();
for (int i = 1; i <= howManyMonthsBack; i++)
{
firstDay = new DateTime(year, month, 1);
DateTime lastDay = firstDay.AddDays(i*-1);
dateList.Add(lastDay);
month = firstDay.AddMonths(-1).Month;
year = firstDay.AddMonths(-1).Year;
}
return dateList;
}
Danke 😃
Habe es selber gefunden:
DateTime lastDay = firstDay.AddDays(-1);
Hab den Wald vor lauter Bäumen nicht gesehen.
Ich hätte allein deine Frage schon nicht verstanden (jedenfalls wahrscheinlich nicht ohne den Code zu lesen)... Ist nicht der letzte Tag der letzten x Monate auch der letzte Tag des letzten 1 Monat?
//edit: Okay, ich glaub, jetzt hab ich's... nachdem ich den Code gelesen hab.
DateTime lastDay = firstDay.AddDays(-1);
Das ist allerdings nur der letzte Tag des Vormonats. Um die des aktuellen Monats oder anderer Monate zu erhalten muss man vorher per AddMonth(+-X) den Monat manipulieren.
Persönlich habe ich mir angewöhnt den 31.12. per Hand zu programmieren. Denn dort kann ggf. der Jahreswechsel zu ungewollten Ergebnissen führen.
Gruß
TriB
Wohl war, der Code oben macht aber genau das. Jemand eine Idee, wie man es kürzer schreiben kann?
Jemand eine Idee, wie man es kürzer schreiben kann?
Idee:
public static List<DateTime> GetLastDayOfPreviousMonths(int howManyMonthsBack)
{
DateTime dateTime = new DateTime(DateTime.Now.Year,DateTime.Now.Month,1);
return Enumerable.Range(0,howManyMonthsBack)
.Select(monthBack => dateTime.AddMonths(-monthBack).AddDays(-1))
.ToList();
}
Gruß,
dN!3L