Laden...

Letzter Tag der letzten X Monate?

Erstellt von math55 vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.314 Views
math55 Themenstarter:in
314 Beiträge seit 2007
vor 14 Jahren
Letzter Tag der letzten X Monate?

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 😃

math55 Themenstarter:in
314 Beiträge seit 2007
vor 14 Jahren

Habe es selber gefunden:

DateTime lastDay = firstDay.AddDays(-1);

Hab den Wald vor lauter Bäumen nicht gesehen.

925 Beiträge seit 2004
vor 14 Jahren

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.

T
708 Beiträge seit 2008
vor 14 Jahren
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

math55 Themenstarter:in
314 Beiträge seit 2007
vor 14 Jahren

Wohl war, der Code oben macht aber genau das. Jemand eine Idee, wie man es kürzer schreiben kann?

2.891 Beiträge seit 2004
vor 14 Jahren

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